【问题标题】:xml to active record in ruby on railsxml 到 ruby​​ on rails 中的活动记录
【发布时间】:2013-03-26 08:55:35
【问题描述】:

我有这个代码:

<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 方法不存在。

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

请帮帮我。

【问题讨论】:

    标签: ruby xml ruby-on-rails-3 activerecord


    【解决方案1】:

    你的班级没有使用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">
    

    【讨论】:

    • 我的问题是将 xml 转换为 ruby​​ on rails 中的模型,无论是活动记录还是裸类
    • 您显示的错误 - from_xml 未定义 - 是由 User 未继承自 ActiveRecord::Base 引起的。如果 User 是正确的 ActiveRecord 模型,您不应该收到该错误。你是吗?
    • 您不需要编写from_xml 函数。如果你的类是用class User &lt; ActiveRecord::Base 定义的,那么from_xml 函数将可用。它应该可以工作。
    • 但我的问题是将我的 xml 转换为我自己定义的模型而不是数据库相关模型,如果您定义为活动记录,我们必须在数据库中创建表
    • 如何在视图中显示用户值
    【解决方案2】:

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

    hash = Hash.from_xml(xml)
    

    您可以通过哈希对其执行活动记录功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-24
      • 1970-01-01
      相关资源
      最近更新 更多