1

ProjectクラスとTeamMemberクラスの間に1対多の関係を持つネストされたモデルのフォームがあり、コントローラーには次のような更新関数があります。

@project = Project.find(params[:id])

@project.update_attributes(params[:project])        

ここで、保存が行われる前に、一部のチームメンバーのフォームに設定されていないフィールドをいくつか設定したいと思います。update_attributes関数をそのまま使用することはできません。

それを行うための最良の方法は何でしょうか?

ありがとう、ニコラス。

4

1 に答える 1

1

関数を調べaccepts_nested_attributes_forます。あなたは次のようなものを持っているかもしれません:

class Project < ActiveRecord::Base
  has_one :team
  accepts_nested_attributes_for :team

  # also this will be useful
  validates_associated :team
end

フォームでは、fields_forメソッドを使用して属性をネストする必要があります。これは次のようになります。

<% form_for(@project) do |p| %>
  <%= p.error_messages %>
  <!-- Project name -->
  <%= p.text_field :name %>

  <% f.fields_for(@project.team) do |t| %>
    <!-- Team Name -->
    <%= t.text_field :name %>
  <% end %>

  <%= f.submit 'Create Project' %>
<% end %>

フォームを送信すると、電話をかけることができ、機能し@project.update_attributes(params[:project])ます。raise params.inspectまた、パラメータがどのようにネストされているかを確認することもできます。

お役に立てれば。

于 2010-10-06T20:33:48.710 に答える