0

約40のフォームフィールドを持つモデルユーザーがいます。次に、子モデルに属するフォームに3つのフィールドがあります。それらは:age、:gender、:homeです。

私はaccepts_nested_attributes_forのドキュメントを見て、子モデルをデータベースに保存する方法について少し混乱しています。

私のUsersControllerには、次のものがあります。

@user = User.new(params[:user])
...
@user.save

Railsのドキュメントには、Memberという名前のモデルがあり、その中には:postsとaccepts_nested_attributes_for:postsがあります。メンバーモデルは次のように保存されます。

params = { :member => {
  :name => 'joe', :posts_attributes => [
    { :title => 'Kari, the awesome Ruby documentation browser!' },
    { :title => 'The egalitarian assumption of the modern citizen' },
    { :title => '', :_destroy => '1' } # this will be ignored
  ]
}}

member = Member.create(params['member'])

しかし、私はすでにparams [:member]とparams [:user]に相当するものを持っています。私の3つの子フィールド:age、:gender、および:homeは、params [:age]、params [:gender]、およびparams [:home]にあります。だから私の質問は、どうすればユーザーモデルを保存し、3つの子フィールドを子モデル内に保存するのかということだと思います。

4

1 に答える 1

0

を使用するには、フォームを適切に設定する必要がありますaccepts_nested_attributes_for

したがって、Userモデルには次のようになります。

accepts_nested_attributes_for :child

そしてあなたのフォームでは、これを行うことができます:

form_for @user do |f|
  f.text_field :name #or whatever your user attributes

  f.fields_for :child, @user.build_child do |child|
    child.text_field :age
    #etc
  end
end

これで、railsはchildオブジェクトをオブジェクトの一部として構築し、 andオブジェクトを一度userに作成できるようになります。userchild

あなたが置くchildchildren、のためにするかは、aとaの accepts_nested_attributes_for間の関係に完全に依存します。ちょうど の場合、上記で十分です。関係の場合は、記号をに変更し、をに変更する必要がありますuserchilduserhas_one :childhas_many:children@user.build_child@user.children.build.

また、モデルに追加することを忘れないでください。追加(child|children)_attributesしないと、フォーム送信を介してそれらを一括割り当てることができなくなります。attr_accessibleuser

于 2013-02-23T20:57:09.617 に答える