2013-04-09 72 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