Пример того, о чем я говорю:
class Person < ActiveRecord::Base
def name=(name)
super(name.capitalize)
end
def name
super().downcase # not sure why you'd do this; this is just an example
end
end
Это похоже на работу, но я только что прочитал раздел переопределение методов атрибутов в документации ActiveRecord :: Base , и это предполагает , используя read_attribute
и write_attribute
методы. Я думал, что должно быть что-то не так с тем, что я делаю в примере выше; в противном случае, почему они благословили бы эти методы как «правильный способ» переопределить методы атрибута? Они также вынуждают гораздо более уродливую идиому, поэтому должна быть веская причина ...
Мой реальный вопрос: что-то не так с этим примером?
ruby-on-rails
oop
activerecord
Ajedi32
источник
источник
В качестве дополнения к ответу Аарона Лонгвелла вы также можете использовать «хэш-нотацию» для доступа к атрибутам, которые имеют переопределенные методы доступа и мутаторы:
источник
self.attribute
перебивает стек на 3.2.16.||=
дефолт:def name; self[:name] ||= 'anon'; end
По этой теме имеется много полезной информации по адресу http://errtheblog.com/posts/18-accessor-missing. .
Короче говоря, ActiveRecord правильно обрабатывает супер-вызовы для средств доступа к атрибутам ActiveRecord.
источник
У меня есть плагин rails, который заставляет переопределять атрибуты работать с супер, как вы ожидаете. Вы можете найти это на github .
Установить:
Использовать:
После того, как вы сделали это, просто работайте:
источник