Rails: одновременное обновление двух полей экземпляра ActiveRecord - PullRequest
0 голосов
/ 22 октября 2010

У меня есть модель, названная Book, которая имеет поля title и filename (и другие поля, но они не связаны). Мне бы хотелось, чтобы поле filename создавалось автоматически с использованием заголовка, поэтому в моем Book.rb :

class Book < ActiveRecord::Base
  # ...

  def title=(title)
    self.filename = sanitize_filename(title)
    self.title = title
  end

  # ...
end

Из-за self.title = title это происходит в бесконечной рекурсии. Как я мог избежать этого?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 22 октября 2010

Вы можете написать это на before_save

def before_save
  self.filename = sanitize_filename(self.title)
end
1 голос
/ 23 октября 2010

В ActiveRecord api есть раздел о «перезаписи стандартных методов доступа». Предлагаемое решение:

def title=(t)
  self.filename = sanitize_filename(t)
  write_attribute(:title, t)
end
1 голос
/ 22 октября 2010

Попробуйте вот так

class Book
  def title=(title)
    self.filename = sanitize_filename(title)
    self[:title] = title
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...