tyb*_*103 5 activerecord model ruby-on-rails callback
我无法在after_create回调中访问我的模型的属性...似乎我应该能够正确吗?
控制器:
@dog = Dog.new(:color => 'brown', :gender => 'male')
@dog.user_id = current_user.id
@dog.save
Run Code Online (Sandbox Code Playgroud)
模型:
class Dog < ActiveRecord::Base
def after_create
logger.debug "[DOG CREATED] color:#{color} gender:#{gender} user:#{user_id}"
end
end
Run Code Online (Sandbox Code Playgroud)
控制台:(一切似乎都很好)
>>Dog.last
=>#<Dog id: 1, color: "brown", gender: "male", user_id: 1>
Run Code Online (Sandbox Code Playgroud)
log:(wtf!?)
...
[DOG CREATED] color: gender:male user
...
Run Code Online (Sandbox Code Playgroud)
我的一些属性显示出来,而其他属性则不显示!不好了!谁知道我做错了什么?我以前总是能够以这种方式使用after_create.
注意:我使用的实际变量名称和值是不同的,但方法和代码是相同的.
找出了我自己的问题。
其中一个属性是虚拟属性,我在其中使用了 self.update_attribute...哎呀!
def price=(amt)
self.update_attribute(:price_in_cents, (amt*100.0).to_i)
end
Run Code Online (Sandbox Code Playgroud)
因此,对于记录来说,如果尚未创建数据库记录,则 update_attribute 将实际创建数据库记录(并触发 after_create)。
下次我一定会发布完整的代码!