1

我有一个名为 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 %>

由于某些奇怪的原因,标签字段中的信息甚至不会显示一次。我错过了什么吗?

如果您发现我做错了什么,请您向我解释一下,因为我是 Rails 新手。

提前致谢!

4

2 回答 2

1

对集合中的 fields_for 调用的块将针对集合中的每个实例重复,本质上是创建自己的循环,因此您实际上不需要编写自己的显式循环“for member in @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 文档,尤其是一对多小节。

于 2011-06-25T04:31:51.560 回答
0

"...",我认为您只需要在对 的调用中去掉fields_for,因为字段 for 需要一个对象。

尝试:

<% fields_for member do |member_form| %>
于 2011-06-25T04:15:19.197 回答