I would like ActiveRecord to set some DB field automatically using callbacks.
class Product < ActiveRecord::Base
after_create :set_locale
def set_locale
开发者_Python百科 self.locale = I18n.locale
end
end
In ./script/console I do
p = Product.create
p
Field p.locale is not set. What did I do wrong?
before_create is called before Base.save, since your not saving its not getting called.
Edit:
class Product < ActiveRecord::Base
before_create :set_locale
def set_locale
self.locale = I18n.locale
end
end
With this in your controller will work how you want it to.
@product = Product.create # before_create will be called and locale will be set for the new product
Use before_create
to set default values. Remember: after_create
is fired after the save to the database. Using after_create
will only initialize the values in memory, and will require additional save to commit the initialized values to the database.
what Joey is saying is that after_create will not work.
use before_create
精彩评论