Как сделать пользовательское поле с to_xml? - PullRequest
1 голос
/ 26 августа 2009

Я работаю над пользовательским методом доступа, как в примере ниже:

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 вопросам:

  1. Как получить доступ к каждому дереву только для экземпляра класса Forest. (Как пример ниже, общее использование воды не должно суммировать дерево другого леса)

    asiaForest = Forest.find_by_name( 'asia' )
    asiaForest.total_water_usage
    
  2. Как заставить этот метод отображаться методом to_xml? например, я думаю, что результат должен быть похож на это:

    asiaForest.to_xml
    <asiaForest>
       ...
       <total_water_usage>239000</total_water_usage>   
       ...
    </asiaForest>
    

Не могли бы вы помочь мне сделать это?

Ответы [ 3 ]

7 голосов
/ 26 августа 2009

records.to_xml(:methods => :total_water_usage)

1 голос
/ 08 сентября 2009

Для реализации в глобальном масштабе модели вы можете добавить это в файл модели.

 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
0 голосов
/ 26 августа 2009

Ответы следующие:

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

Пояснение: Ответ на первую часть вопроса приведен в total_water_usage, который будет вызывать water_usage для каждого дерева и суммировать его.

Часть 2: мы должны переопределить метод to_xml, чтобы включить ключ total_water_usage. Взято из оригинального метода to_xml.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...