1

我有这个代码:

<user> <first_name>Bob</first_name> <last_name>Smith</last_name></user>

这段代码如何转换为用户类?

class User 
  attr_accessor :first_name, :last_name  
end

我尝试了以下方法:

@user = User.new
@user.from_xml(xml_data)

但它向我显示了一个错误:该from_xml方法不存在。

如何将xml转换为ruby on rails中的类对象?

请帮我。

4

2 回答 2

0

您的班级没有使用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">
于 2013-04-04T10:34:51.293 回答
0

Hash.from_xml("some xml") 将 xml 转换为哈希

hash = Hash.from_xml(xml)

并且从哈希中您可以对其执行活动记录功能。

于 2013-10-03T07:43:52.943 回答