Pregunta Rails: atributo de configuración en after_create


Me gustaría que ActiveRecord establezca algún campo de base de datos automáticamente usando devoluciones de llamada.

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

En ./script/console hago

p = Product.create
p

El campo p.locale no está establecido. ¿Qué hice mal?


5
2018-02-24 15:43


origen


Respuestas:


before_create se llama antes Base.save, ya que tu no guardaste no se llamará.

Editar:

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

Con esto en su controlador funcionará como usted lo desee.

@product = Product.create # before_create will be called and locale will be set for the new product

7
2018-02-24 17:28



Utilizar before_create para establecer valores predeterminados Recuerda: after_create Está despedido después el guardar en la base de datos. Utilizando after_create solo inicializará los valores en memoria, y requerirá adicional guardar para confirmar los valores inicializados en la base de datos.


2
2018-02-13 14:37



lo que Joey está diciendo es que after_create no funcionará.

use before_create


1
2018-02-24 20:03