2013-11-09 5 views
1

Я новичок в рельсах и продолжаю бороться со следующей проблемой. К сожалению, часы поиска не привели к решению, поэтому я был бы более чем счастлив получить ваш вклад.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 %> 

Спасибо за помощь заранее! Стефан

ответ

0
belongs_to :client, class_name: "Company", foreign_key: "id" 

Должен быть

belongs_to :client, class_name: "Company", foreign_key: "client_id" 

Также я бы обновить миграцию и сделать это поле не обнуляемым, лучше, чтобы получить исключение, чем экономия заказа без клиента

+0

Спасибо за быстрый ответ ! –

Смежные вопросы