我一直在阅读有关 inverse_of 的内容,而我在网上看到的所有内容似乎都不一致并且让我感到困惑。如果你看这里,你可以看到
inverse_of 支持有一些限制:
- 它们不适用于 :through 关联。
- 它们不适用于 :polymorphic 关联。
- 它们不适用于 :as 关联。
- 对于belongs_to 关联,忽略has_many 反向关联。
但就在此之上,他们举了这个例子
class Customer < ActiveRecord::Base
has_many :orders, :inverse_of => :customer
end
class Order < ActiveRecord::Base
belongs_to :customer, :inverse_of => :orders
end
我认为他们说第一个 inverse_of 什么都不做,但如果是这样,他们为什么要这样做?
另外,即使上面的东西说 inverse_of 不能通过关联工作,这个页面说
如果您在连接模型上使用belongs_to,最好在belongs_to 上设置:inverse_of > 选项,这意味着以下示例在>tags 是has_many :through 关联的情况下可以正常工作):
并给出这个例子
@post = Post.first
@tag = @post.tags.build :name => "ruby"
@tag.save
最后一行应该保存直通记录(Taggable)。这仅在设置 >:inverse_of 时才有效:
class Taggable < ActiveRecord::Base
belongs_to :post
belongs_to :tag, :inverse_of => :taggings
end
对我来说,所有这些似乎都不一致且非常混乱。但总的来说,我认为对每个关系都说 inverse_of 并没有什么坏处。那是问题吗?我看到很多人在 SO 上问这个问题,但没有看到任何人给出明确的“是”或“否”。