.to_xml与ruby 1.8.7(ree)和rails 3.1.3抛出错误?

时间:2012-03-07 16:50:37

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

所以我试图在我的应用程序中实现好的元数据概念。基本上,我将XML格式的一些细节存储在数据库的单个列中,但在我的应用程序中,我可以通过Hash访问它们。

def extra_info=(data)
    data = {} unless data.is_a?(Hash)
    self[:extra_info] = data.to_xml(:dasherize => false)
end

def extra_info
   Hash.from_xml(self[:extra_info])['hash']
end

相当简单,遵循我在关于该主题的博客文章中阅读的内容。

但是,现在我的应用程序抛出错误:

ERROR ArgumentError: wrong number of arguments (1 for 0)
.../app/models/users/usage.rb:35:in to_xml

所以我试过这个

def extra_info=(data)
    data = {} unless data.is_a?(Hash)
    self[:extra_info] = data.to_xml
end

我仍然得到同样的错误!有谁遇到过这个问题?怎么了?

2 个答案:

答案 0 :(得分:0)

您应该使用* read_attribute *和* write_attribute *

示例:

def ip 
  # ip is stored as a number, convert the number to a human readable IP address (i.e. 192.168.1.1)
 IPAddr.new(read_attribute(:ip) , Socket::AF_INET).to_s    
end

def ip=(val)
   # ip is stored as a number, convert a human readable ip (i.e. 192.168.1.1) to a number
   write_attribute(:ip, IPAddr.new(val).to_i)
end

答案 1 :(得分:0)

原来这是Rails中包含的构建器版本的向后兼容性问题。仅限REE问题。

来自elisehuard的github:

  

在Ruby 1.8.7方法中,to_xs的方法是0 - 在1.9.2中它需要编码

刑事。无论如何,非常感谢她的修复,可以找到here