2015-02-06 2 views
2

모델 belongs_to 시나리오가 있습니다. 두 모델 모두 options 필드가 있고 options에 저장된 값을 Agentoptions과 병합하여 @agent.options을 수행하고 AgentScenario의 값을 검색 할 수 있습니다.레일은 즉시 모델에 추가합니다

# 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

2

Agent는 필드 하고 대신 필드를 검색의 메소드를 호출 클래스 내에서 self.options를 호출 할 때, options 이름 방법을 가지고 있기 때문에. self.options과 병합하려고하면 무한 반복됩니다. 메서드의 이름을 바꿉니다.

+1

답변 해 주셔서 감사합니다. 나는이 메소드를 필드와 동일한 이름으로 '@ agent.options'에 대한 호출을 무시하고 기존 참조를'@ agent.options'로 유지할 수 있기를 희망했습니다. 두 옵션을 합쳐서 사용할 수있는 좋은 방법이 있나요?'options'를 호출 할 수 있지만 둘 다 얻을 수 있습니까? 'after_initialize' 콜백에서 두 메소드를 병합하는 것이 가장 좋은 방법이라고 생각합니다. – Adam