0

以下のような設定があります。すべて正常に動作しますが、モデルの検証が失敗した場合 (カスタム セッターが呼び出されたとき) 、モデルで が呼び出されたEmployeeときにそれらを起動するにはどうすればよいですか?update_attributesEmployer

ビュー/雇用主/_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
4

3 に答える 3

0

これを実現するためにvalidates_associated検証を宣言できます。

于 2013-05-08T18:02:14.793 に答える