2013-04-04 156 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) 

,並從散列可以在其上進行的活動記錄功能。