嵌套表单不能与has_many一起使用

时间:2011-09-12 01:55:17

标签: ruby-on-rails ruby ruby-on-rails-3 erb formtastic

我有一个模型订单

class Order < ActiveRecord::Base
  has_many :order_details, :class_name => "OrderDetail"
  accepts_nested_attributes_for :order_details
end

在我看来,我尝试构建嵌套表单

<%= semantic_form_for @order do |f| %>
    <%= f.inputs :name => "Detail", :for => :order_detail do |od| %>
    <%= od.input :shoe_id, :collection => Shoe.all.map{|s|[s.article_number,s.id]}  %>
    <%= od.input :size_id, :collection => Size.all.map{|s|[s.number,s.id]} %>
    <%= od.input :color_id, :collection => Color.all.map{|c|[c.name,c.id]} %>
    <%= od.input :quantity %>
  <%- end -%>
<%- end -%>

有效。但是使用

:for => :order_details

没有。它什么都没有。

==已解决!!

我找到了解决方案。

@ order.order_details是emtpy所以没有渲染nested_form。

在控制器中写字:

@order.order_details.build

3 个答案:

答案 0 :(得分:0)

fields_for用于渲染嵌套属性,我认为以下应该可以工作

<%= semantic_form_for @order do |f| %>
   <%= f.fields_for :order_details do |od| %>
   <%= od.input :shoe_id, :collection => Shoe.all.map{|s|[s.article_number,s.id]}  %>
   <%= od.input :size_id, :collection => Size.all.map{|s|[s.number,s.id]} %>
   <%= od.input :color_id, :collection => Color.all.map{|c|[c.name,c.id]} %>
   <%= od.input :quantity %>
<%- end -%>

&lt;% - end - %&gt;

我们可以用fields_for帮助器创建多个嵌套记录 参见rails cast

http://railscasts.com/episodes/196-nested-model-form-part-1

http://railscasts.com/episodes/197-nested-model-form-part-2

答案 1 :(得分:0)

我找到了解决方案。

@order.order_details is emtpy so no nested_form is rendered.

在控制器中写字:

@order.order_details.build

将正确渲染formtastic

答案 2 :(得分:0)

我找到了解决方案。

@ order.order_details为空,因此不会呈现嵌套表单。

在控制器中写字:

@order.order_details.build