2013-10-17 1 views
1

저는 각 모델에 해시를 반환하는 메소드가있는 프로젝트에 STI를 사용하고 있습니다. 해당 해시는 해당 모델의 특정 프로필입니다. 각 자식 모델이 부모의 해시를 검색하여 자체에 추가하려고합니다. 아래 예제가 있습니다단일 테이블 상속을 통해 부모 특성에 액세스하는 방법?

class Shape 
include Mongoid::Document 
field :x, type: Integer 
field :y, type: Integer 
embedded_in :canvas 

def profile 
    { properties: {21} } 
end 
end 



class Rectangle < Shape 
field :width, type: Float 
field :height, type: Float 

def profile 
    super.merge({ location: {32} }) 
end 
end 

Rectangle의 프로파일 메소드가 Shape의 고유 한 메소드를 리턴하는 방법을 알아 내려고하고 있습니다. 결과는

(properties => 21, location => 32) 

상속받은 하위에서 부모에게 액세스하려면 어떻게해야합니까? 그것은 단지 슈퍼입니까? 지난 며칠 동안 이걸 붙잡 았어. 도움이 많이 감사!

답변

0

예, 간단합니다. :-) {21}{32}에 부적절한 리터럴이 두 개 있습니다.

다음 작품 :

class Shape 

def profile 
    { properties: 21 } 
end 
end 


class Rectangle < Shape 

def profile 
    super.merge({ location: 32 }) 
end 
end 

rect = Rectangle.new 
puts rect.profile # => {:properties => 21, :location => 32} 
+0

우, 바보 같은 실수. 고마워 피터! 슈퍼 변수를 로컬 변수에 저장하는 것이 이치에 맞습니까? 이 예제에서 super는 부모의 해시를 반환합니다. 그렇습니까? –

+0

예, 'super'는이 경우 부모의 해시를 반환합니다. 귀하의 첫 번째 질문에 관해서는 결과를 저장하고 부모 메소드를 다시 호출하지 않고 액세스하려는 경우 "예"라고 말합니다. –