Rails即时添加模型

时间:2015-02-06 21:13:03

标签: ruby-on-rails ruby activerecord activemodel

我有一个belongs_to场景的模型代理。两个模型都有字段options,我想将Scenario options中存储的值与Agent options合并,以便我可以@agent.options并检索AgentScenario的值。

我试过了:

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

但这会引发Stack too deep错误。

任何建议都将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:4)

Brennan已经解释过,您的options方法会自行调用导致Stack to deep错误的方法。

还有另一种(更低级别)方式来读取活动记录模型的属性:read_attribute。使用该方法,您可以写:

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

此方法完全适用于此用例。详细了解overwriting default accessors in the docs

答案 1 :(得分:2)

由于Agent有一个名为options的字段方法,因此在从类中调用self.options时,您调用方法而不是检索字段。当您尝试与self.options合并时,您将无限递归。重命名方法。