2013-04-09 71 views
2

我有覆盖模型中的访问者和在模型上稍后使用to_xml方法的问题。问题是,to_xml似乎使用默认的getter方法,而不是使用read_attributeRails 4 to_xml问题与访问器覆盖在模型

我的模型:

class Announcement < ActiveRecord::Base 
    ... 

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

    ... 
end 

我使用这个,为了方便地通过参数我HAML意见运行,通过总是有标签和text_fields正确的方法。因为我需要一些属性来显示修改,所以我覆盖了访问者。

-# 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在使用我的自定义的吸气剂,而不是read_attribute(:created_at),这将使正确的值。我很惊讶没有发现这个问题在别的地方,但是有解决这个问题的方法吗?

回答

1

有使用的选项和块的方式与to_xml

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

这不漂亮,但。我只是为你的视图使用一个装饰器,并保留模型属性方法,德雷珀与Rails 4很好地工作。

+0

我接受它,因为德雷珀的提示。这似乎是一个伟大的宝石!尽管第一个“解决方案”太麻烦了。 – 2013-04-27 15:00:29