我有一个名为Order的模型和另一个名名为Member的模型,当我试图在Orders视图中显示Members模型中的字段时,它甚至在使用fields_for标记时都不会显示。这是我的代码。
订单模型
class Order < ActiveRecord::Base
has_many :members
end
成员模型
class Member < ActiveRecord::Base
belongs_to :order
end
订单控制器
class OrdersController < ApplicationController
def new
@order = Order.new
3.times { @order.members.build }
@title = "Order Form"
end
def create
@order = Order.new params[:order]
if @order.save
flash[:notice] = "Your order has been created"
redirect_to orders_path
else
@title = "Order Form"
render 'new'
end
end
end
问题在我的订单中:
<% for member in @order.members %>
This displays 3 times but the information below doesn't
<% fields_for "...", member do |member_form| %>
<p>
Name: <%= member_form.text_field :name %>
</p>
<% end %>
<% end %>
出于某种奇怪的原因,标记字段中的信息甚至不会显示一次。我是不是错过了什么?
如果你发现我做错了什么,你能向我解释一下吗,因为我是新手。
提前感谢!
为集合上的fields_for调用提供的块将为集合中的每个实例重复,本质上是创建自己的循环,因此您不需要为@order.members中的成员编写自己的显式循环。此外,您可以利用nested_attributes功能直接使用@order.save:保存关联成员
class Order < ActiveRecord::Base
has_many :members
accepts_nested_attributes_for :members
end
class Member < ActiveRecord::Base
belongs_to :order
end
视图中:
<%= form_for @order do |order_form| %>
...
<%= order_form.fields_for :members do |member_form| %>
Name: <%= member_form.text_field :name %>
<% end %>
<% end %>
我认为你的控制器创建方法应该像你现有的那样工作
请参阅API文档中的fields_for,尤其是一对一小节。
我认为您只需要在对fields_for
的调用中去掉"...",
,因为的字段需要一个对象。
尝试:
<% fields_for member do |member_form| %>