2015-02-06 57 views
2

我有一個模型代理belongs_to情景。這兩個模型都有字段options,我想合併存儲在ScenariooptionsAgentoptions中的值,以便我可以執行@agent.options並從AgentScenario中檢索值。Rails添加到飛行模型

我想:

# in agent.rb 
def options 
    scenario.options.merge(self.options) 
end 

但是,這將引發Stack too deep錯誤。

任何建議將不勝感激。謝謝!

回答

4

Brennan已經解釋過您的options方法會自動地調用自己導致錯誤的原因是Stack to deep

還有另一種(更低級別的)方法來讀取活動記錄模型的屬性:read_attribute。使用該方法,您可以編寫:

def options 
    read_attribute(:options).merge(scenario.options) 
end 

此方法正好存在於此用例中。閱讀更多關於overwriting default accessors in the docs

+0

謝謝,這是訣竅! – Adam 2015-02-06 21:55:50

2

因爲Agent有場命名爲options,呼籲從類中self.options當你打電話,而不是檢索領域的方式方法。當您嘗試與self.options合併時,您將無限遞歸。重命名該方法。

+1

感謝您的回覆。我已經將該方法命名爲與該字段相同,希望能夠覆蓋對「@ agent.options」的調用,以便我可以保留對「@ agent.options」的現有引用。是否有一種很好的方式來即時合併兩個選項哈希值,所以我仍然可以調用'options'但是同時獲得?我認爲最好的方法可能是在'after_initialize'回調中合併兩者。 – Adam 2015-02-06 21:37:18