あるモデル (「リクエスト」) が別のモデル (「オーダー」) にネストされたフォームを持つサイトを作成しようとしています。具体的には、注文/新規ページに、ユーザーが入力して送信できるリクエストで構成されたフォームを作成して、作成された注文にすべて関連付けられるようにしたいと考えています。
ここの誰かの提案について、私はトピック (#196) に関する Railscast を調べましたが、理解できない問題に遭遇したので、質問することにしました。問題は、彼の指示に従っているのに、リクエスト フォームが表示されないことです。ただし、Order モデルに関連付けられたフォーム フィールドは表示されますが、基本的に Railscast をそのままコピーしたため、非常に混乱しています。考え?
これが私のフォームコードです。私のサイトに表示されないのは、具体的には fields_for タグの一部です。
<%= form_for(@order) do |f| %>
<% if @order.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@order.errors.count, "error") %> prohibited this order from being saved:</h2>
<ul>
<% @order.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<p>
<%= f.label :user_name %><br />
<%= f.text_field :user_name %>
</p>
<p>
<%= f.label :user_email %><br />
<%= f.text_field :user_email %>
</p>
<% f.fields_for :requests do |builder| %>
<p>
<%= builder.label :item, "Item" %><br />
<%= builder.text_field :item %>
</p>
<p>
<%= builder.label :lbs, "LBs" %> <br />
<%= builder.text_field :lbs %>
</p>
<% end %>
<p><%= f.submit "Submit Order" %></p>
<% end %>
そして、これが2つのモデルの私のコードです。最初に注文してください:
class Order < ActiveRecord::Base
attr_accessible :order_status, :price_estimate, :price_final, :user_email, :user_name, :user_phone
has_many :requests, :dependent => :destroy
accepts_nested_attributes_for :requests
end
class Request < ActiveRecord::Base
attr_accessible :item, :lbs, :notes, :order_id, :status
belongs_to :order
end
最後に、関連する場合に備えて、キャストの提案に従って、注文コントローラーの作成アクションに少し追加しました。
def new
@order = Order.new
3.times { @order.requests.build }
respond_to do |format| # this part I copied from a tutorial. But when I commented it out, it didn't change anything, so I don't think this is the problem
format.html # new.html.erb
format.json { render json: @order }
end
end
ヘルプ?私はこれに非常に混乱しています。問題は「ビルダー」に関係しているのではないかと推測していますが、私はこれが初めてで、1時間ほどいじってもあまり効果がありませんでした.
どんな助けにも本当に感謝します。(また、あとがきとして。明日これを見るために、あきらめて寝ます。それまでに質問をフォローアップできなかったらごめんなさい)。
ありがとう!