2011-01-31 5 views
1

私はコメントのネストされた属性を持っています。親クラスは投稿です。ルビでnested_attributesを使用して値を保存する

<% form_for @post do |f| %> 

........... 

<% f.fields_for :comments do |builder| %> 

    <%= builder.text_field :name %> 
    <%= builder.text_field :address %> 
    <%= builder.hidden_field :label, :value => user_1 %> 

    <%= builder.text_field :name %> 
    <%= builder.text_field :address %> 
    <%= builder.hidden_field :label, :value => user_2 %> 
    <% end %> 

<% end %> 

私は記事を保存すると、私もコメントを保存したい、と私はformタグを使用している場合、私はそれがで何もせずにコメントを保存しますかわからない、hidden_​​fieldに異なる値を必要としますコントローラ。

私はまた:accepts_nested_attributes_for:投稿モデルのコメントを使用しました。もし誰かがもう一度考えることができれば、それは素晴らしいことになるでしょう。

名前、アドレス、ラベルはコメントフィールドです。投稿を保存すると、保存するコメントが2行必要です。 1つは最初のtext_field、text_fieldおよびhidden_​​fieldから、もう1つは2番目の入力フィールドからです。

+0

これらのネストされたモデルをどのように保存しようとしていますか?より良いアイデアを得るためにここにいくつかのコードを投稿できますか? –

答えて

1

私は、私が作成したときに何が起こることで、私は私のコントローラ

if @post.comments.nil? 
    @post.comments.build(:username => "user1") 
    @post.comments.build(:username => "user2") 
end 

にこのコードを持っているので、私の形で

<%= form_for @post do |f| %> 
    <%= f.fields_for :comments do |builder| %> 
    <%= builder.label :username, "#{builder.object.username}" %> 
    <%= builder.hidden_field :username %> 
    <% if builder.object.username == "user1" %> 
     <%= builder.text_field :address, :value => "address1" %> 
    <% else %> 
     <%= builder.text_field :address, :value => "address2" %> 
    <% end %> 
    <% end %> 
<%= f.submit "Create Post" %> 
<%end%> 

これを持っている私の友人 の助けを借りてこれを固定ポスト、2つのコメント1番めの値:address1、username:user1と2番の値address:address2、username:user2はポストを保存するときに保存されます!

1

同じIDを持つフィールドを持つフォームを作成します。この結果、HTMLが無効になり、すべての(ほとんどの)ブラウザで正しく処理されません。

FormTagHelpersを使用するには、固有のIDを生成する必要があります。例:

<% form_tag('/builder') %> 
    <%= text_field_tag ':name1' %> 
    <%= text_field_tag ':address1' %> 

    <%= text_field_tag 'name2' %> 
    <%= text_field_tag 'address2' %> 
<% end %> 

これにより、正しいHTMLが生成されます。これで、異なる名前のフィールドを扱うようにコントローラを変更する必要があります。 user1とuser2の名前を取得するには、params[:name1]params[:name2]を使用する必要があります。

idをもっと有用なものに変更することで(私はIDがどのように名前atmであるべきかを頭で覚えていません...)、ユーザのフィールドを 'グループ化'できるので、一致するかもしれないparams[:user1][:name]あなたのテーブルでより良い。

を編集してください:field_forのドキュメントは既にご覧になりましたか?それは、モデルと必要なフォームの良い例をいくつか持っています。

+0

私は間違いなくこの1つを試してみます。ありがとう! –

関連する問題