Как перехватить присвоение атрибутам? - PullRequest
1 голос
/ 02 марта 2011

У меня ошибка, связанная с тем, что в связанной модели внешний ключ родительской модели принимает значение NULL в таблице связанной модели.

Чтобы отследить, почему это происходит, я хотел бы записывать в файл журнала каждый раз, когда присваивается атрибут (т. Е. Каждый вызов attr= методов).

Как я могу это сделать? Позволяет ли Rails это сделать каким-то способом, о котором я не знаю?

Ответы [ 2 ]

1 голос
/ 02 марта 2011

Я думаю, что вы можете использовать методы обратного вызова (before_save) для проверки состояния вашего объекта.И следующее может помочь вам ...

article = Article.find(:first)
article.changed?  #=> false

# Track changes to individual attributes with
# attr_name_changed? accessor
article.title  #=> "Title"
article.title = "New Title"
article.title_changed? #=> true

# Access previous value with attr_name_was accessor
article.title_was  #=> "Title"

# See both previous and current value with attr_name_change accessor
article.title_change  #=> ["Title", "New Title"]
1 голос
/ 02 марта 2011

Вы можете сделать это, просто переписав метод attr =.Например:

class User
  def username= username
    Rails.logger.info "Setting username with #{username}"
    write_attribute :username, username
  end
end

Это также можно сделать с помощью методов цепочки.Например:

class User
  alias :username_old= :username=
  def username= username
    Rails.logger.info "Setting username with #{username}"
    self.username_old = username
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...