Reputation: 36243
I would like ActiveRecord to set some DB field automatically using callbacks.
class Product < ActiveRecord::Base
after_create :set_locale
def set_locale
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?
Upvotes: 6
Views: 21561
Reputation: 41
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.
Upvotes: 4
Reputation: 455
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
Upvotes: 10
Reputation: 9093
what Joey is saying is that after_create will not work.
use before_create
Upvotes: 2