Rails 4 to_xml问题与模型中的访问者覆盖

时间:2013-04-09 11:08:57

标签: model ruby-on-rails-4 ruby-2.0 export-to-xml

我在模型中覆盖访问器并稍后在模型上使用to_xml方法时遇到问题。问题是,to_xml似乎使用默认的getter方法,而不是使用read_attribute

我的模特:

class Announcement < ActiveRecord::Base
  ...

  def created_at
    date = self[:created_at]
    "#{german_date(date)} #{german_time(date)} #{I18n.t(:clock)}"
  end

  ...
end

我正在使用它,通过始终为标签和text_fields提供正确的方法,以便在haml视图中轻松运行参数。因为我需要修改一些属性,所以我覆盖了访问者。

-# Minified example ...
= form_for ...
  - %i(a b c d e).each do |attr|
    = f.label attr
    = f.text_field attr

问题是:当我运行to_xml时,我遇到了这个问题:

NoMethodError: undefined method `xmlschema' for "15.03.2009 18:17 Uhr":String

显然,to_xml正在使用我的自定义getter而非read_attribute(:created_at),这将提供正确的值。我很惊讶在其他地方没有发现这个问题,但是有没有解决这个问题的方法?

1 个答案:

答案 0 :(得分:1)

有一种方法可以使用选项和带有to_xml

的块
announcment.to_xml(except: :created_at, procs: -> (options, record) {
  options[:builder].tag!("created-at", record.read_attribute(:created_at))
})

但这并不漂亮。我只会使用装饰器来查看视图并单独保留模型属性方法,Draper可以很好地使用Rails 4。