Dodawanie kilku rekordów

Cześć,
trochę musiałem zmodyfikować kod, bo potrzebuję rozdzielić mikołaja na name i surname, oba pola nie mogą być puste. Jak był rollback, to jak była 1 linia zła to nic mi nie dodawało do bazy. A ja chcę żeby dodało poprawne rekordy, a złe zignorowało.

def self.create_from_text(txt) txt = txt.split("\r\n").reject(&:blank?) n=0 self.transaction do txt.map! do |human| human = human.split(" ") mikolaj = new(name: human[0] , surname: human[1]) if mikolaj.save n+=1 end end end [txt.length,n] end

[code=ruby] n = Mikolaj.create_from_text(params[:list_of_mikolaj])
if n[1]>0
if n[0]==n[1]
@notice = “Added #{n[1]} mikolajs”
else
@mis = n[0]-n[1]
@notice = “Added #{n[1]} mikolajs, #{@mis} lines were ignored”
end
respond_to do |format|
format.html { redirect_to mikolajs_path, notice: @notice }
format.json { render json: group_mikolajs_path, status: :created, location: mikolajs_path }
end

else
flash[:notice] = 'Did not add mikolajs'        
render action: "new"

end[/code]

Może tak być?

[code=ruby]def self.create_from_text(txt)
txts = txt.split("\r\n").select(&:present?).map do |human|
name, surname = human.split(’ ')
new(name: name, surname: surname).save
end

[txts.count(true), txts.count(false)] # saved, missed
end

def create
saved, missed = Mikolaj.create_from_text(params[:list_of_mikolaj])

ustawienie notice/alert

respond_to do |format|
format.html { redirect_to mikolajs_path, notice: notice }
format.json { render json: group_mikolajs_path, status: :created, location: mikolajs_path }
end
end[/code]

Jeżeli wrzuciłbym to w transakcję self.transaction do to jak zrobić żeby txts było dostępne poza do i end ?

Zrobić deklarację wcześniej txts = [] ?

Coś takiego jest poprawne?

Presence.transaction do result = Presence.update(params[:presences].keys, params[:presences].values).reject { |p| p.errors.empty? } end