2012-03-07 181 views
0

所以我試圖在我的應用程序中實現好的元數據概念。基本上,我將一些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

回答

0

原來這是用Builder的版本向後兼容性問題包括在軌。僅與稀土問題有關。

從elisehuard在GitHub上:

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

犯罪。無論如何,非常感謝她的修復,這可以找到here

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 
+0

感謝您的回答,雖然這可能是一種選擇,我仍然不知道爲什麼這不工作! – 2012-03-15 08:10:22

+0

使用讀寫屬性。你嘗試過嗎?你不能在相同的方法定義中引用self [:extra_info]。要麼改變你的方法的名稱,要麼使用讀/寫。 – Roger 2012-03-15 08:38:17