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”的未定义方法“元素”:字符串):

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 回答