xpepermint
xpepermint

Reputation: 36243

Rails: Setting attribute in after_create

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

Answers (3)

Guest68
Guest68

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

Joey
Joey

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

Omar Qureshi
Omar Qureshi

Reputation: 9093

what Joey is saying is that after_create will not work.

use before_create

Upvotes: 2

Related Questions