Ruby on rails 使用ActiveRecord的rails 3中的逆_有哪些限制

Ruby on rails 使用ActiveRecord的rails 3中的逆_有哪些限制,ruby-on-rails,ruby-on-rails-3,rails-activerecord,Ruby On Rails,Ruby On Rails 3,Rails Activerecord,我一直在读关于逆的书,我在网上看到的一切似乎都不一致,让我困惑。如果你看,你可以看到 反向支撑有一些限制: 他们不与:通过协会工作 它们不适用于:多态关联 它们不与:作为关联 对于属于关联的,有许多反向关联被忽略 然而就在这上面,他们给出了这个例子 class Customer < ActiveRecord::Base has_many :orders, :inverse_of => :customer end class Order < ActiveRecord:

我一直在读关于逆的书,我在网上看到的一切似乎都不一致,让我困惑。如果你看,你可以看到

反向支撑有一些限制:

  • 他们不与:通过协会工作
  • 它们不适用于:多态关联
  • 它们不与:作为关联
  • 对于属于关联的,有许多反向关联被忽略
然而就在这上面,他们给出了这个例子

class Customer < ActiveRecord::Base
   has_many :orders, :inverse_of => :customer
end

class Order < ActiveRecord::Base
   belongs_to :customer, :inverse_of => :orders
end
@post = Post.first
@tag = @post.tags.build :name => "ruby"
@tag.save
最后一行应该保存直通记录(标记)。这仅在设置了>:reverse\u的情况下有效:

类标记:标记 结束
对我来说,所有这些似乎都不一致,而且非常令人困惑。但总的来说,我认为在每一段关系上说相反的话没有坏处。这是个问题吗?我见过很多人问这个问题,但还没有看到任何人的肯定或否定

始终指定它并没有坏处,它将允许rails优化对象的加载,因此您可以在活动记录模型关系链的两个方向上上下移动,而不会出现奇怪的错误,因为更改一个对象的值不会更改其引用

将其设置在不起作用的地方的唯一问题是,正如您之前所说的那样,使用某些类型,如果它们以静默方式失败,那么在更改某些内容后,如果您在方法链上走错了方向,您将得到affore-indicate bug

这是来自rails API的

d = Dungeon.first
t = d.traps.first
d.level == t.dungeon.level # => true
d.level = 10
d.level == t.dungeon.level # => false
上面示例中的副本实例d和t.Dungeon引用了来自数据库的相同对象数据,但实际上这些数据的内存副本不同。在关联上指定:inverse_选项可以告诉活动记录反向关系,并优化对象加载

d = Dungeon.first
t = d.traps.first
d.level == t.dungeon.level # => true
d.level = 10
d.level == t.dungeon.level # => false