您的班级没有使用ActiveRecord
; 这只是一个裸班。如果要使用模块from_xml
中定义的 ,则ActiveModel
需要继承自ActiveRecord::Base
:
class User < ActiveRecord::Base
attr_accessor :first_name, :last_name
end
如果你不想使用 ActiveRecord::Base,你可以只包含ActiveModel::Serializers::Xml
在你的类中;但是,这依赖attributes=
于 AR::Base 中定义的 ,因此我们需要自己定义它。以下似乎有效,但我还没有彻底测试过。
class User
include ActiveModel::Serializers::Xml
def attributes=(attrs)
attrs.each {|name, val| instance_variable_set("@#{name}", val) }
end
end
user = User.new
user.from_xml('<user> <first_name>Bob</first_name> <last_name>Smith</last_name></user>')
# => #<User:0x3bcc760 @first_name="Bob", @last_name="Smith">