.to_xml使用红宝石1.8.7(ree)和rails 3.1.3抛出错误?

问题描述:

所以我试图在我的应用程序中实现好的元数据概念。基本上,我将一些XML格式的细节存储在数据库的单个列中,但在我的应用程序中,我可以通过哈希来访问它们。.to_xml使用红宝石1.8.7(ree)和rails 3.1.3抛出错误?

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 

我仍然得到同样的错误!任何人面临这个问题?怎么了?

+0

你可以发布'data.inspect'告诉你什么吗? – ScottJShea 2012-03-07 20:07:22

+0

@ScottJShea:一点都没有!这是我的模型文件,所以我无法启动应用程序或控制台或任何东西! – 2012-03-10 08:58:13

原来这是用Builder的版本向后兼容性问题包括在轨。仅与稀土问题有关。

从elisehuard在GitHub上:

in Ruby 1.8.7 arity of method to_xs is 0 - in 1.9.2 it takes encoding

犯罪。无论如何,非常感谢她的修复,这可以找到here

您应该使用* 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 
+0

感谢您的回答,虽然这可能是一种选择,我仍然不知道为什么这不工作! – 2012-03-15 08:10:22

+0

使用读写属性。你尝试过吗?你不能在相同的方法定义中引用self [:extra_info]。要么改变你的方法的名称,要么使用读/写。 – Roger 2012-03-15 08:38:17