2016-05-17 5 views
0

Я строю метод ведения журнала.Ruby on rails - запрос ActiveRecord из значений массива

в моем действии обновления я сравнить параметры из почтового значения со значением фактического децибела, чтобы поймать изменения и помещая их в массиве

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"

но ошибка:

неопределенный метод `м» для #

Благодаря все

ответ

0

необходимо указать атрибут (или метод) от @client, например:

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

EDIT: если @client является активным объектом записи, вы можете использовать @client.changes перед сохранением, чтобы отслеживать любые изменения, внесенные в атрибуты объекта.

EDIT: заполнение второго значения, вы можете 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

Смежные вопросы