Как переопределить столбец в модели Rails?

У меня есть модель для одной из моих таблиц базы данных. Я хочу переопределить имя столбца для этой конкретной таблицы. Как я могу это достичь.

Например, пусть моя таблица будет называться DUMMY и имеет один столбец с именем col_a

col_a
20
34
42
23
12

Я бы сделал @dummy.col_a. Теперь этот метод должен вернуть мне 0 для чисел, заканчивающихся 0, и для всего остального он должен вернуть исходное значение. Я мог бы это сделать, указав новый метод, но я хочу переопределить имя столбца. Пожалуйста помоги.

Ответ 1

Вы можете переопределить метод col_a. Используйте метод read_attribute, чтобы прочитать значение в базе данных. Что-то вроде этого:

def col_a
  if self.read_attribute(:col_a).to_s.end_with?('0')
    0
  else
    self.read_attribute(:col_a)
  end
end

Ответ 2

Вы можете просто определить метод с тем же именем, что и столбец. Чтобы получить фактическое значение столбца, используйте self [column_name]. Итак, что-то вроде этого должно работать:

class Dummy < ActiveModel::Base
  def col_a
    self[:col_a] % 10 == 0 ? 0 : self[:col_a]
  end
end

(Предполагается, что col_a является целым числом.)

Ответ 3

Вы можете достичь этого переписывания устройств доступа по умолчанию, как описано в документации. Все значения столбцов автоматически доступны через базовые аксессоры на объекте Active Record, но иногда вы хотите специализироваться на этом поведении. Это можно сделать, перезаписав аксессоров по умолчанию (используя то же имя, что и атрибут), и позвонив read_attribute(attr_name) и write_attribute(attr_name, value), чтобы реально изменить ситуацию.

Для получения дополнительной информации перейдите к разделу "Замену переопределения по умолчанию".