私はレールが初めてで、次の問題に苦労しています。残念ながら、何時間も検索しても解決には至りませんでした。ご意見をお聞かせいただければ幸いです。
注文の作成時に、クライアント (親として) と注文アイテム (子として) を作成しようとします。後者は正常に動作します。ただし、注文を保存すると、 *client_id* が注文レコードに渡されないことを除いて、注文とクライアントの両方がデータベースに保存されます。
ここに私のコードがあります:
会社のモデル
class Company < ActiveRecord::Base
has_many :orders, foreign_key: "client_id"
accepts_nested_attributes_for :orders
validates :name,
:presence => true,
:uniqueness => { :case_sensitive => false }
validates_associated :users,
:orders
attr_accessible :name,
:account,
:users_attributes,
:orders_attributes,
:company_id
end
注文モデル
class Order < ActiveRecord::Base
has_many :order_items
accepts_nested_attributes_for :order_items
belongs_to :client, class_name: "Company",
foreign_key: "id"
accepts_nested_attributes_for :client
attr_accessible :order_items_attributes,
:order_number,
:client_attributes,
:client_id
validates_associated :order_items
validates_presence_of :order_number
:client_id
end
注文管理者
def create
@order = @client.orders.build(params:[orders])
puts @order.to_yaml
respond_to do |format|
if @order.save!
format.html { redirect_to @order, notice: 'Order was successfully created.' }
format.json { render json: @order, status: :created, location: @order }
else
format.html { render action: "new" }
format.json { render json: @order.errors, status: :unprocessable_entity }
end
end
end
新しい注文フォーム
<%= simple_form_for @order, :html => { :class => 'form-horizontal' } do |f| %>
<%= render 'shared/error_messages', :object => @order %>
<div class = "span3">
<%= f.simple_fields_for :client do |client_builder| %>
<%= client_builder.input :name,
:label => 'Client' %>
<% end %>
<%= f.input :order_number %>
<%= f.simple_fields_for :order_items do |items_builder| %>
<%= items_builder.input :reference_number %>
<%= items_builder.input :item_description %>
<% end %>
<%= f.button :submit,
:class => 'btn'%>
<%= link_to t('.cancel', :default => t("helpers.links.cancel")),
orders_path, :class => 'btn' %>
</div>
<% end %>
事前にご協力いただきありがとうございます。ステファン