未显示内部显示元素的导轨3的字段



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

相关内容

  • 没有找到相关文章

最新更新