如何将带参数的方法传递给#to_xml?

时间:2009-09-12 02:53:04

标签: ruby-on-rails

如何将带参数的方法传递给#to_xml?

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

有办法做到这一点吗?什么是正确的语法?

感谢。

3 个答案:

答案 0 :(得分:0)

to_xml应该表达你的模型的状态。因此它不应该需要任何外部“位置”参数。如果这真的是你需要的话,你看起来需要一个'在位置X'给我一个我模型的xml表示'。我想你可以在你的模型中添加一个'set_default_location',并将price_points_for_location更改为参数的默认值:

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

答案 1 :(得分:0)

你可以尝试重新定义像

这样的to_xml方法
def to_xml(location)
   # do your stuff
   super()
end

但不确定它会如此有效。其他选项是为您的模型创建一些新的XML视图方法,例如:

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

答案 2 :(得分: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])