.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
我仍然得到同样的错误!任何人面临这个问题?怎么了?
原来这是用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
感谢您的回答,虽然这可能是一种选择,我仍然不知道为什么这不工作! – 2012-03-15 08:10:22
使用读写属性。你尝试过吗?你不能在相同的方法定义中引用self [:extra_info]。要么改变你的方法的名称,要么使用读/写。 – Roger 2012-03-15 08:38:17
你可以发布'data.inspect'告诉你什么吗? – ScottJShea 2012-03-07 20:07:22
@ScottJShea:一点都没有!这是我的模型文件,所以我无法启动应用程序或控制台或任何东西! – 2012-03-10 08:58:13