作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
如这里所述:
http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html
inverse_of 似乎告诉 Rails 缓存内存关联并最小化数据库查询。他们的例子是:
class Dungeon < ActiveRecord::Base
has_many :traps, :inverse_of => :dungeon
has_one :evil_wizard, :inverse_of => :dungeon
end
class Trap < ActiveRecord::Base
belongs_to :dungeon, :inverse_of => :traps
end
他们立即跟进:
for `belongs_to` associations `has_many` inverse associations are ignored.
所以我有几个问题。
has_many
是否忽略了 belongs_to
的反向关联?如果是这样,他们的例子有何意义?它不应该什么都不做吗?据我所知(假设它做任何事情)所有这允许做的是:
dungeon.traps.first.dungeon
对 .dungeon
的最终调用不会生成一个全新的查询,而只是达到内存关联。假设这是正确的,为什么我永远不想要这种行为?为什么我不把 inverse_of:
放在每个关联上?
最佳答案
我开始撰写有关 Rails 变形器的文章,以及当关联不是模型的直接变形时如何使用 inverse_of 来指示它是什么。但后来我滚动到你提到的部分,这就是我的看法。假设你有类似的东西:
# let's pick a dungeon
d = Dungeon.first
# say you find also find a trap that belongs to this particular d
t = Trap.find(...)
# then t.dungeon is the exact same object as d
d == t.dungeon
当然 dungeon.traps.first.dungeon
没有任何意义,我怀疑这就是它存在的原因。就我个人而言,我不知道我会在哪里以及如何使用它,但他们给出的例子似乎可以满足一个用例。它是这样的:
# you have an attribute level on dungeon
d.level # => 5
# now say you have a comparison after a modification to level
d.level = 10
# now without inverse_of the following thing occurs
d.level # => 10
t.dungeon.level # => 5
# d was updated and since t.dungeon is a whole different object
# it doesn't pick up the change and is out of sync but using invers_of you get
d.level # => 10
t.dungeon.level # => 10
# because d and t.dungeon are the very same object
希望澄清事情。
关于ruby-on-rails - 为什么我不想到处使用 inverse_of?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14927952/
我有一个图书馆,我计划以 dex 形式使用。我想直接针对这个库进行编译,但不导出它。相反,我想将它放在我的资源中并使用类加载器实际实例化它。 这是我的图书馆: public class Foo {
我是一名优秀的程序员,十分优秀!