我看起来像一个简单的查询。我需要创建一个基于单个模型接受多个记录的视图。在我的例子中,模型是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
答案 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
查看)。但我想如果你得到了质量分配错误,你还是会这样做:)。
我希望它有所帮助。