0

RoRを数年間使用しなかった後、RoRに戻り、ActiveModelを使用してプレーンオブジェクトをXMLにシリアル化しようとしています。

activemodel / lib / activemodel / serialization.rbのコメントに従って、私は次のことを行っています。

class XmlError

  include ActiveModel::Serializers::Xml

  attr_accessor :code
  attr_accessor :description

  def attributes
    @attributes ||= {'code' => 'nil', 'description' => 'nil'}
  end

  def initialize(error_code)
    @code = error_code
    @description = "blah"
   self
  end
end

私はこれをコントローラーで次のように使用します。

render :xml => XmlError.new("invalid_login")

そして私は次のスタックトレースを取得します:

NoMethodError(XmlError:Classの未定義のメソッド `model_name'):

app / controllers / users_controller.rb:19:in `login '

app / controllers / users_controller.rb:5:in `login '

クラスメソッドを作成するmodel_nameと、次のスタックトレースが得られます。

NoMethodError( "XmlError":Stringの未定義のメソッド `element'):

app / controllers / users_controller.rb:19:in `login '

app / controllers / users_controller.rb:5:in `login '

ここで尻尾を追いかけているような気がします。クラスで簡単なことを見逃したことがありますか?私はその例に厳密に従った。

4

2 に答える 2

2

extend ActiveModel::Naming

あなたが探しているものです。

http://rdoc.info/github/lifo/docrails/master/ActiveModel/Naming

于 2011-03-30T20:39:33.800 に答える
0

ActiveModel::Base をサブクラス化しないのはなぜですか?

于 2010-08-25T20:48:17.770 に答える