2011-12-21 26 views
1

同じものの複数の入力フィールド、Postsがあるページがあります。今、ユーザーが3つのフィールドを入力すると、データベースに保存されているのは最後のフィールドだけです。一方、それは3つすべてを保存し、それぞれにそれ自身のpost_idを与える必要があります。また、ユーザーが他のフィールドに何も入力しない場合は、データベースに保存しないでください。今Ruby on Rails:同じフォーム内の複数の入力フィールド - ID /値の変更

new_step_4_html.erb

<%= form_for(@post) do |f| %> 
    <%= f.text_field :content %> 
    <%= f.text_field :content %> 
    <%= f.text_field :content %> 
<% end %> 

projects_controller.rb

def new_step_4 
    @post = Post.new 
end 

、それがないすべてのものを提出している:コンテンツ分野、それらはすべて同じIDを共有して明らかにするので/値。残念なことに、Railscasts#197はネストされたフォームに適用されるので、javascriptとhelperのstuffはすべてネストされたものに適用されます。私はこれが単純なものだと思うだろう。 IRCの人は、私はビューファイルや何かに何らかの種類の「3倍」コードを書くことができると述べました。

答えて

3

まず、投稿するモデルを編集する必要があります。

post.rb

has_many :contents, :dependent => :destroy 
accepts_nested_attributes_for :contents 

あなたは、コンテンツのフィールドを保存するために別のモデルが必要になります。 その最初のモデル

rails g model content post_id:integer body:text 

を生成するモデル

content.rb = f.text_field <%をすることの代わりに今

belongs_to :post 

、:コンテンツ%>に数回、聞かせてあなたが基本的にそれらをお互いに上書きさせるようになったからです。

3.times do 
    content = @post.content.build 
end 

フォームビューは次のようなものになります。

<%= form_for @post do |f| %> 
    <%= f.fields_for :contents do |builder| %> 
    <%= builder.label :body, "Question" %><br /> 
    <%= builder.text_area :body, :rows => 3 %><br /> 
    <%= end %>  
    <p><%= f.submit "Submit" %></p> 
<% end %> 

私はこのコードをテストしていないが、考え方は正しいはずです。あなたがより多くの情報を必要とするかどうかを教えてください。

+0

あなたの答えに感謝します。現在、 'content'は私のPostテーブルの列です。 Postでは、user_id、project_idというコンテンツがあります。だから、それはネストされたフォームではありません。 –

+0

しかし、複数のコンテンツフィールドを持つことはできません。テーブルにはスペースが1つしかないためです。 –

+0

ああ、そうだ。私を助けようとしてくれてありがとう、リークありがとう。 –

関連する問題