所以我试图在我的应用程序中实现好的元数据概念。基本上,我将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
我仍然得到同样的错误!有谁遇到过这个问题?怎么了?
答案 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。