Я новичок в рельсах и продолжаю бороться со следующей проблемой. К сожалению, часы поиска не привели к решению, поэтому я был бы более чем счастлив получить ваш вклад.RoR: Создайте родителя через ребенка
При создании заказа я пытаюсь создать клиент (как родительский) и заказать элементы (как дочерние). Последний работает отлично. Однако при сохранении заказа оба заказа и клиента хранятся в базе данных, за исключением того, что * 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
Orders Controller
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
New Order Form
<%= 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 %>
Спасибо за помощь заранее! Стефан
Спасибо за быстрый ответ ! –