Rails 3 - 创建视图以插入多个记录

时间:2012-12-01 09:47:53

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

我看起来像一个简单的查询。我需要创建一个基于单个模型接受多个记录的视图。在我的例子中,模型是Project,它有1个外键(人)和2个字段时间,角色。我需要创建一个视图(表单)来插入5个角色。

<%= form_for(@project) do |f| %>
 <% 5.times do |index|%>
  <div class="field">
    <%= f.label :position %><br />
    <%= f.text_field "fields[#{index}][stime]" %>
  </div>

 <% end %>
 <div class="actions">
     <%= f.submit %>
 </div>  
<% end %>

我收到一条错误消息:未定义的方法`fields [0] [stime]'

我认为嵌套模型的railscast不是我需要的。

我将如何创建这个?

编辑:项目模型代码如下:

class Project < ActiveRecord::Base
   belongs_to :person
   attr_accessible :role, :stime
end

新方法的Projects_Controller代码如下:

def new
 @project = Project.new
end

1 个答案:

答案 0 :(得分:1)

我看到你打算建立一对多的关系(Product has_many :roles)。

这是一些建议。

首先,看一下accepts_nested_attributes_for方法。您需要将其添加到模型中才能执行批量创建。

其次,fields_for是设计嵌套表单所需的。

我将举例说明一个简单的Product has_many :line_items案例的大规模创建:

<%= form_for @product do |f| %>
    <%= f.fields_for :line_items, [LineItem.new]*5 do |li_fields| %>
      <%= li_fields.text_field :quantity %>
      <%= li_fields.text_field :price %>
      <br>
    <% end %>
  <%= f.submit "Create line items" %>
<% end %>

您只需要在控制器中写下以下内容:

@product.update_attributes params[:product]

和5 line_items将立即创建。

不要忘记列出 association _attributes的白名单(请参阅日志中的params查看)。但我想如果你得到了质量分配错误,你还是会这样做:)。

我希望它有所帮助。