Как обернуть все средства доступа к атрибутам ActiveRecord? - PullRequest
2 голосов
/ 27 мая 2009

У меня есть модель, в которой атрибуты могут иметь значение null, но когда читается атрибут null, я бы хотел предпринять специальное действие. В частности, я хотел бы бросить определенное исключение. То есть что-то вроде

class MyModel < ActiveRecord::Base
  def anAttr
      read_attribute(:anAttr) or raise MyException(:anAttr)
  end
end

все хорошо, но это означает, что мне приходится вручную кодировать идентичный пользовательский метод доступа для каждого атрибута.

Я думал, что могу переопределить read_attribute, но мой переопределенный read_attribute никогда не вызывается.

Ответы [ 2 ]

4 голосов
/ 28 мая 2009

Не знаю, зачем вам это нужно, но увы:

def get(attr)
  val = self.send(attr)
  raise MyException unless val
  val
end

@object.get(:name)
1 голос
/ 16 июня 2009

Забавно, мы изучали то же самое сегодня. Проверьте в attribute_method.rb, где существует вся логика Rails для атрибутов. Вы увидите define_attribute_methods метод, который вы сможете переопределить.

В конце концов, я думаю, что мы собираемся сделать это по-другому, но это было полезное упражнение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...