2011-03-01 55 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

相关问题