开发者

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
     开发者_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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜