由於這裏概述:爲什麼我不想在所有地方使用inverse_of?
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:
?
這是否意味着,如果我說了(而不是d.level = 10)t.dungeon.level = 10,即d.level不會得到更新,即使如果我設置inverse_of,因爲它被忽略?一般來說,更新集合的成員不會同步到該成員的其他實例?但至少在希望他們最終支持它的時候,似乎並沒有把問題推到任何地方,對吧? – bdwain 2013-04-18 06:59:12
@bdwain這對我來說很有意思,因爲我總是認爲Rails會自動推斷出這種'inverse_of'關係(如果名字匹配)。在最近出現這種情況後(同時在一個相關模型的accept_nested_attributes_for模型上進行驗證),我必須同意你的結論:慷慨地使用'inverse_of'。我無法想象任何理由。 – steve 2013-11-25 22:57:03