2009-09-12 2 views
0

#to_xml에 인수가있는 메소드를 전달하려면 어떻게해야합니까?#to_xml에 인수가있는 메소드를 어떻게 전달합니까?

@object.to_xml(:methods => [:a_method_with_args]) 

이 방법이 있습니까? 올바른 구문은 무엇입니까?

감사합니다.

+0

수행하려는 작업을 약간 확장 할 수 있습니까? 나는 모델 방법을 만드는 것이 효과가 있다고 말하고 싶다. – Yaraher

+0

내 모델에있는 메서드를 전달하려고하지만 다른 모델에 의존하기 때문에 인수가 필요합니다. 메서드는 일반적으로 다음과 같이 호출됩니다. @ item.price_points_for_location (location) 메서드에 위치 인수를 전달하는 방법을 모르겠습니다. 이 일을하는 다른 방법들도 괜찮을 것이지만, 나는 그것이 무엇인지 알지 못합니다. – Zef

답변

0

to_xml은 모델의 상태를 나타냅니다. 따라서 외부 '위치 정보'주장이 필요하지 않아야합니다. 이것이 실제로 필요한 것이면 'X 위치에있을 때 내 모델을 XML로 표현해야합니다.'와 같이 보입니다.

attr_writer :default_location 
def price_points_for_location(location = @default_location) 
    ... 
end 
0

당신은

def to_xml(location) 
    # do your stuff 
    super() 
end 

하지만 같은 to_xml 방법을 재정의하는 시도 할 수 있습니다 : 당신이 단지 인수에 대한 기본 값을 갖도록 모델에 'set_default_location'를 추가하고 price_points_for_location을 변경할 수 있습니다 추측 그게 잘 작동 할거야. 다른 옵션은 다음과 같이 모델에 대한 새로운 XML보기 메소드를 만드는 것입니다.

def as_xml(location) 
    self.price_points_for_location(location) 
    self.to_xml 
end 
0

답변을 주셔서 감사합니다. 좋은 옵션처럼 보입니다. 내가 실제로 한 일은 proc을 사용하는 것입니다. to_xml과 함께 procs를 사용할 수 있다는 것을 알고 있었지만 여러 객체를 반복 할 때 배열의 현재 객체에 액세스 할 수없는 것으로 보입니다. 이 문제를 해결하기 위해 다음과 같은 작업을 수행했습니다.

price_points = @items.map { |item| item.price_points_for_location(location) } 
price_point = Proc.new {|options| options[:builder].tag!('price_points', price_points.shift) } 
@items.to_xml(:procs => [price_point]) 
관련 문제