2011-03-01 70 views
1

我有一個關於使用belongs_to關聯實例化模型的問題。使用關聯實例化模型

class Customer < ActiveRecord::Base 
    has_many :orders, :dependent => :destroy 
end 

class Order < ActiveRecord::Base 
    belongs_to :customer 
end 

這個實例化的工作:

http://guides.rubyonrails.org/association_basics.html開始採取

@order = @customer.orders.create(:order_date => Time.now) 



但這樣做的工作一樣好?

class Order < ActiveRecord::Base 
    attr_accessible :customer 
    belongs_to :customer 
end 

@customer = Customer.new 
@order = Order.create(:customer => @customer) 

我的實驗表明,它確實在一定程度上。但因爲關聯被延遲加載,它可能在某些情況下(我可以舉一個例子,如果你想)棘手。

所以我的問題是: 這種實例化在多大程度上與前者一樣工作?

+0

甚至與此實例:@order = Order.create(:customer_id => @ customer.id)我認爲這與上述後者類似。 – Magne 2011-03-03 12:27:15

回答

1

這兩種形式都適用。

無論採用哪種方式,您都有一個將customer_id字段設置爲現有客戶ID的Order對象。當你調用customer.orders.create()時,它將在幕後填充該關聯。在你的第二個例子中,你正在手動完成它。

+0

感謝您的回覆。爲什麼attr_accessible:客戶是錯誤的?是否需要能夠輸入:customer到構造函數中? – Magne 2011-03-02 14:07:25

+0

我錯了,attr_accessible正是你想要聲明屬性作爲屬性哈希的白名單。編輯我的答案,刪除該評論。我誤解attr_accessible()爲attr_accessor(),這將是多餘的。 – Winfield 2011-03-03 13:55:06