1

Order という名前のモデルと Member という名前の別のモデルがあり、Orders ビューで Member モデルのフィールドを表示しようとすると、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 %>

何らかの奇妙な理由で、タグのフィールドの情報が一度も表示されません。何か不足していますか?

私が間違っていることを見つけたら、レールに慣れていないので説明してください。

前もって感謝します!

4

2 に答える 2

1

コレクションの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、特に1対多のサブセクションについてはAPIドキュメントを参照してください。

于 2011-06-25T04:31:51.560 に答える
0

fields for はオブジェクトを期待しているため、"...",への呼び出しで を取り除くだけでよいと思います。fields_for

試す:

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