Rails: установка атрибута в after_create - PullRequest
6 голосов
/ 24 февраля 2010

Я бы хотел, чтобы ActiveRecord автоматически устанавливал некоторые поля БД с помощью обратных вызовов.

class Product < ActiveRecord::Base
   after_create :set_locale
   def set_locale
      self.locale = I18n.locale
   end
end

In ./script/console Я делаю

p = Product.create
p

Поле p.locale не установлено. Что я сделал не так?

Ответы [ 3 ]

8 голосов
/ 24 февраля 2010

before_create вызывается перед Base.save , так как вы не сохраняете его, не вызывается.

Edit:

class Product < ActiveRecord::Base
   before_create :set_locale
   def set_locale
      self.locale = I18n.locale
   end
end

С этим в вашем контроллере будет работать так, как вы хотите.

@product = Product.create # before_create will be called and locale will be set for the new product
2 голосов
/ 13 февраля 2014

Используйте before_create для установки значений по умолчанию. Помните: after_create запускается после сохранения в базу данных. Использование after_create только инициализирует значения в памяти и потребует дополнительного сохранения для фиксации инициализированных значений в базе данных.

1 голос
/ 24 февраля 2010

Джои говорит, что after_create не будет работать.

использовать до создания

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