ruby-on-rails – 为什么我不想在任何地方使用inverse_of?
发布时间:2020-12-16 19:59:30 所属栏目:百科 来源:网络整理
导读:如下所示: http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html inverse_of似乎告诉Rails缓存内存关联并最小化数据库查询.他们的例子是: class Dungeon ActiveRecord::Base has_many :traps,:inverse_of = :dungeon has_one
如下所示:
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 inflector,以及当一个关联不是一个直接的拐点,你使用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 希望澄清事情. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |