1

私はレールが初めてで、次の問題に苦労しています。残念ながら、何時間も検索しても解決には至りませんでした。ご意見をお聞かせいただければ幸いです。

注文の作成時に、クライアント (親として) と注文アイテム (子として) を作成しようとします。後者は正常に動作します。ただし、注文を保存すると、 *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 %>

事前にご協力いただきありがとうございます。ステファン

4

1 に答える 1