问题描述
|
我有一个名为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 %>
而且我认为您的控制器创建方法应该可以正常使用。
有关fields_for,请参阅API文档,尤其是“一对多”小节。
, 我认为您只需要摆脱对fields_for
的调用中的\"...\",
,因为字段期望一个对象。
尝试:
<% fields_for member do |member_form| %>