Rails 3的這個主題似乎有很多問題(和答案),但我現在要求在2015年Rails 4(或即將推出的5)。如何覆蓋關聯(has_one)getter(延遲加載)?
我試圖使用圖案像以下的(用於在用戶::資料的情況下的HAS_ONE協會,我想懶惰負荷):
def profile
self.build_profile unless self[:profile]
super
end
的問題是,在上述端部使用一個沒有.id的Profile對象,所以表格只會附加無關聯的記錄。
這工作(但我打電話超兩次,我不知道有足夠的瞭解紅寶石知道這是一件可怕的事情 - 沒有任何警告):
def profile
self.build_profile unless super
super
end
活動記錄文檔顯示你可以使用super或* _attribute(或[]),但是在實現'超級'的過程中,關聯關係似乎有所不同。
我仍然可以使用別名方法鏈接,但我想知道我的模式有什麼問題。
編輯:看來使用「accep_nested_attributes_for」使這件事情變得複雜。
我刪除了overidden getter和將我的'fields_for'改爲包含創建佔位符對象的簡單邏輯,例如:<%= f.fields_for:profile,(user.profile || user.build_profile)do | profile_f | %>這不是我的問題的答案,但它是我提出的問題的完全可以接受的解決方案。 – chrisp