2014-11-11 6 views
0

У меня есть модель с такими атрибутами:Как получить текущее значение атрибута перед сохранением нового в AR?

  1. some_number
  2. some_string

Я хочу поставить некоторое значение в some_string в зависимости от текущего значения some_number и новое значение some_number по обновлению.

Пример:

some_number Текущий является

New (обновлено) значение some_number является

Я хочу поставить 4+5 строку в some_string до того some_number перезаписывается.

Как я могу заставить его работать?

+0

переопределять значение '' some_number = сеттер - ср http://stackoverflow.com/questions/10464793/what-is-the-right-way-to- override-a-setter-method-in-ruby-on-rails –

+0

Не могли бы вы объяснить мне немного более четко w Могу ли я решить свою проблему, переопределив сеттер? Как получить текущее значение и новое значение в этом сеттере? – blackst0ne

ответ

2

Если мне нужно изменить некоторые атрибуты в зависимости от другого значения атрибута на события обновления, я бы сделал так:

class Thing < ActiveRecord::Base 
    before_update :modify_some_string 
    protected 
    def modify_some_string 
      # some actions with self.some_string and self.some_number 
      # and self.some_string_was and self.some_number_was 
    end 
end 
1

Трудно сказать, из вашего вопроса, как указано, но если вы хотите some_number «s текущего значения в конце some_string ...

class Thing < ActiveRecord::Base 
    def initiaize 
    @numbers = [] 
    super 
    end 

    def some_number=(value) 
    @numbers << value 
    write_attribute :some_string, @numbers.join('+') 
    super 
    end 
end 
+0

Обратите внимание, что это решение применяется ко всем изменениям в 'some_number', независимо от того, является ли модель' save'd в базе данных. –

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