2012-03-25 32 views
5

我得到RecordNotFound與accepts_nested_attributes_for和belongs_to的

的ActiveRecord :: RecordNotFound:找不到客戶端與ID = 3與ID =訂單

嘗試提交訂單形式的時現有客戶。這發生在窗體或鍵入控制檯:

Order.new(:client_attributes => { :id => 3 }) 

payment_form.html.erb

<%= semantic_form_for @order, :url => checkout_purchase_url(:secure => true) do |f| %> 

     <%= f.inputs "Personal Information" do %> 

      <%= f.semantic_fields_for :client do |ff| %> 
       <%= ff.input :first_name %> 
       <%= ff.input :last_name %>    
       <!-- looks like semantic_fields_for auto-inserts a hidden field for client ID --> 
      <% end %> 

     <% end %> 
<% end %> 

Order.rb

class Order < ActiveRecord::Base 
    belongs_to :client 
    accepts_nested_attributes_for :client, :reject_if => :check_client 

    def check_client(client_attr) 
    if _client = Client.find(client_attr['id']) 
     self.client = _client 
     return true 
    else 
     return false 
    end  
    end 
end 

reject_if靈光乍現從here,但我登錄的方法,它甚至不被稱爲!不管它的名字是什麼!

回答

7

通過重載client_attributes =方式固定的問題,如所描述here

def client_attributes=(client_attrs)  
    self.client = Client.find_or_initialize_by_id(client_attrs.delete(:id)) 
    self.client.attributes = client_attrs 
    end 
+0

這難道不是最終創造另一個客戶端,即使它通過ID找到一個客戶端? – dubilla 2014-07-02 22:46:49

0

如果只希望與現有客戶端的新訂單,而無需修改客戶端,你需要指定的ID。

Order.new(client_id: 3) 

這是另一種方式來做到這一點,而不會加重client_attributes=方法和清潔

新訂單現在有ID的客戶端3

如果你也想更新你必須螞蟻客戶端的屬性添加client_attributes,例如:

Order.new(client_id: 3, client_attributes: { id: 3, last_order_at: Time.current }) 
相關問題