2013-04-04 158 views
1

红宝石活动记录我有这样的代码:XML在轨道上

<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中的类对象?

请帮帮我。

回答

0

你的班级没有使用ActiveRecord;这只是一个空的班级。如果你想使用from_xml,这是ActiveModel模块中定义的,你需要从ActiveRecord::Base继承:

class User < ActiveRecord::Base 
    attr_accessor :first_name, :last_name 
end 

如果你不想使用ActiveRecord :: Base的,你可以只包括ActiveModel::Serializers::Xml到类;然而,它依赖于在AR :: Base中定义的attributes=,所以我们需要自己定义。以下似乎工作,但我没有彻底测试它。

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"> 
+0

我的问题是在rails上将xml转换为ruby中的模型,无论它是活动记录还是裸类 – Muralikrishna 2013-04-04 10:38:21

+0

您显示的错误 - from_xml没有被定义 - 是由'User'不是从'ActiveRecord: :Base'。如果'User'是一个合适的'ActiveRecord'模型,你不应该得到那个错误。你是? – Chowlett 2013-04-04 10:42:43

+0

如果我在活动记录中写入from_xml我应该在那里实现什么逻辑.. – Muralikrishna 2013-04-04 11:04:41

0

Hash.from_xml( “一些XML”)将XML转换成散列

hash = Hash.from_xml(xml) 

,并从散列可以在其上进行的活动记录功能。