2016-05-17 24 views
0

我正在構建一個日誌記錄方法。Ruby on Rails - 從數組值中查詢ActiveRecord

在我的更新動作

我比較從崗位價值與實際分貝的價值PARAMS捕捉變化,並把它們放入數組

1°步 - 創建一個數組,popolate變革的名稱 modificati = Array.new

modificati.push("nome") if @clienti.nome != params[:clienti][:nome] 
modificati.push('email') if @clienti.email != params[:clienti][:email] 
..... the same for every field ..... 

2°步驟是隻記錄改變的場,所以我創建具有變化的新的數組

modifiche = Array.new 

modificati.each do |m| 
    modifiche.push("#{m} : #{@clienti.m} >> - ") 
end  

但它不工作,有人可以幫我嗎? 我的目標是把這個數組:

「諾姆:old_value_from_db >> new_value_from_post」

但錯誤是:

未定義的方法`M」爲#

感謝全部

回答

0

您需要調用@client的屬性(或方法),如:

modificati.each do |m| 
    modifiche.push("#{m} : #{@client.public_send(m.to_sym)} >> - ") 
end 

編輯:如果@client是一個活動記錄對象,您可以在保存之前使用@client.changes來跟蹤對對象屬性所做的任何更改。

編輯:填充第二值,你可以變異它之前DUP @client:

client_before = @clienti.dup 
. 
. 
. 
# update @clienti, then 
. 
. 
modifiche = [] 
modificati.each do |m| 
    modifiche.push("#{m} : #{client_before.public_send(m.to_sym)} >> #{@clienti.public_send(m.to_sym)} ") 
end 
+0

'是絕對不推薦send'。更好地使用'public_send' – meta

+0

你是對的,現在編輯我的答案 –

+0

非常感謝!有用! – EffeBi