Perish

博客园 首页 联系 订阅 管理

class Customer < ActiveRecord::Base

  has_many :orders

end

class Order < ActiveRecord::Base

  belongs_to :customer

end

如上代码两个model在做如下查询的时候:

c = Customer.first

o = c.orders.first

c.first_name == o.customer.first_name # true

c.first_name = "other name"

c.first_name == o.customer.first_name # false

这是因为c 和 o.customer 在内存中两个对象对应的同一个数据

 

当在model中添加  :inverse_of 的时候就会出现这种情况:

class Customer < ActiveRecord::Base

  has_many :orders, inverse_of: :customer

end

class Order < ActiveRecord::Base

  belongs_to :customer, inverse_of: :orders

end

####

o = c.orders.first

c.first_name == o.customer.first_name # true

c.first_name = "other name"

c.first_name == o.customer.first_name # true

当添加了inverse_of ,只会加载一个customer对象

在用inverse_of的时候是有限制的:

有这些条件:through  :polymorphic :as 的时候,因为有belongs_to和has_many, inverse_of 这个会被忽略!

 

当有这些条件的时候

:conditions
:through
:polymorphic
:foreign_key 关联不会自动逆转!

posted on 2014-06-27 16:49  ---小青年---  阅读(641)  评论(0编辑  收藏  举报