Ruby on Rails:同一表单中的多个输入字段 - 更改ID /值

时间:2011-12-21 00:33:34

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1

有一个页面,其中有相同内容的多个输入字段,帖子。现在,当用户输入问题时,假设3个字段,保存到数据库的唯一字段是最后一个。然而,它应该保存所有三个并给它们每个自己的post_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

现在,它所做的只是提交一个:content字段,显然是因为它们共享相同的id /值。不幸的是,Railscasts#197适用于嵌套表单,因此他所做的javascript和帮助程序都适用于嵌套。我认为这很简单。来自IRC的人提到我可以在视图文件中做某种“3次”代码吗?

1 个答案:

答案 0 :(得分:3)

首先,您可能需要编辑您发布的模型。

post.rb

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

您需要另一个模型来存储内容字段。 所以首先生成一个模型

rails g model content post_id:integer body:text

模型

content.rb

belongs_to  :post

现在,而不是做&lt;%= f.text_field:content%&gt;有几次,让rails创建它们,因为现在你基本上让它们互相覆盖。

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 %>

我没有测试这段代码,但这个想法应该是正确的。如果您需要更多信息,请告诉我。