Ich habe die Aktion, in der ich den Mitgliedern Gruppen zuweisen, die zutreffen. Im Grunde bekomme ich nur eine Liste von E-Mails, von der Ansicht in einem Formular, und dann habe ich die Aktion, um es zu fangen:Zurückrollen Modelländerungen von Aktion
Was ich frage mich ist, dass, wenn ich die Änderungen, die bereits gemacht wurde, Rollback, Wenn das zweite Mitglied nicht existiert oder bereits eine Gruppe hat, wie kann ich diese zurücksetzen?
def group_create
@group = Group.new
params[:member].each { |m|
v = Volunteer.find_by_email(m[1])
raise "#{m[1]} doesn't exist" unless v.present?
raise "#{v.email} is already in a group" if v.group.present?
v.group = @group
v.save!
}
@group.save
rescue => error
flash[:error] = "Error: #{error}"
ensure
respond_to do |format|
unless flash[:error].present?
flash[:notice] = 'Group Application succeded.'
flash[:joined] = true
format.html { redirect_to apply_group_path }
else
flash.discard
format.html { render :group }
end
end
end
Was habe ich schon darüber nachgedacht, war die v.save
und @ group.save bis zum Ende bewegen, und machen eine weitere Schleife von params[:member].each....
, aber das wäre durchaus eine Verschwendung von Ressourcen, werden die find_by_email- zu tun Methode zweimal so oft wie nötig.
Also, eine Group.assign_members machen, die ein Array von E-Mails oder etwas in diese Richtung nimmt? –