1

我有一个看起来很简单的查询。我需要创建一个视图,该视图将接受基于单个模型的多个记录。在我的例子中,模型是 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]'

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

我将如何去创造这个?

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

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

新方法的 Projects_Controller 代码如下:

def new
 @project = Project.new
end
4

1 回答 1

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]

并且line_items将立即创建 5 个。

不要忘记列入白名单(在您的日志中查看)。但是我认为,如果您遇到质量分配错误,无论如何您都会这样做:)association_attributesparams

我希望它有所帮助。

于 2012-12-01T11:42:44.220 回答