我正在开发一个自定义访问器方法,如下例所示:
class Forest < ActiveRecord : Base
has_many :trees
def total_water_usage
# summarize each tree's water_usage in this forest.
# return as string
end
end
class Tree < ActiveRecord : Base
belongs_to :forest
end
也就是说,我需要你的2个问题的帮助:
如何仅为Forest类的实例访问每个树。 (如下图所示,总用水量不应总结另一棵森林的树木)
asiaForest = Forest.find_by_name( 'asia' )
asiaForest.total_water_usage
如何通过to_xml方法强制使用此方法?例如,我认为结果应该类似于:
asiaForest.to_xml
<asiaForest>
...
<total_water_usage>239000</total_water_usage>
...
</asiaForest>
你能帮我这么做吗?
答案 0 :(得分:7)
records.to_xml(:methods => :total_water_usage)
答案 1 :(得分:1)
要在全局模型范围内实施,您可以将其添加到模型文件中。
alias_method :ar_to_xml, :to_xml
def time_zone_offset
get_my_time_zone_offset_or_something
end
def to_xml(options = {}, &block)
default_options = { :methods => [ :time_zone_offset ]}
self.ar_to_xml(options.merge(default_options), &block)
end
答案 2 :(得分:0)
答案如下:
class Forest < ActiveRecord::Base
has_many :trees
def total_water_usage
trees.sum(:water_usage)
end
def to_xml
attributes["total_water_usage"] = total_water_usage
attributes.to_xml({:root => self.class.element_name})
end
end
class Tree < ActiveRecord::Base
belongs_to :forest
def water_usage
# place your water usage calculation for a tree here
end
end
说明: 问题的第1部分在total_water_usage中得到解答,它将在每棵树中调用water_usage并将其相加。
第2部分我们必须覆盖to_xml方法以包含total_water_usage键。取自原始的to_xml方法。