2

モデル内のアクセサーを上書きし、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ではなく、カスタム ゲッターを使用しています。read_attribute(:created_at)この問題がどこにも見つからなかったことに驚いていますが、この問題の解決策はありますか?

4

1 に答える 1

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でうまく機能します.

于 2013-04-10T23:39:13.217 に答える