以下のような設定があります。すべて正常に動作しますが、モデルの検証が失敗した場合 (カスタム セッターが呼び出されたとき) 、モデルで が呼び出されたEmployee
ときにそれらを起動するにはどうすればよいですか?update_attributes
Employer
ビュー/雇用主/_form.html.erb
<%= form_for @employer %>
<% @employer.employees.each do |employee| %>
<%= fields_for "employer[employee_attributes][]", employee do |e| %>
# FORM HERE
<% end %>
<% end %>
<% end %>
モデル/employer.rb
attr_accessible :employee_attributes
has_many :employees
def employee_attributes=(employee_attributes)
employee_attributes.each_pair{|id,attributes|
employee = Employee.find(id)
employee.update_attributes(attributes)
}
end
解決:
sockmonks の回答に従ってemployee.update_attributes!(attributes)
、代わりに以下の呼び出しを行います (最後に強打を付けます)。これにより例外が発生します。
次にEmployer
コントローラーで
コントローラー/employers_controller.rb
def update
@employer = Employer.find(:id)
begin
@employer.update_attributes(params[:employer])
rescue ActiveRecord::RecordInvalid => e
# Handle Error(s)
end
end