Rails after_create回调无法访问模型的属性

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.

注意:我使用的实际变量名称和值是不同的,但方法和代码是相同的.

tyb*_*103 4

找出了我自己的问题。

其中一个属性是虚拟属性,我在其中使用了 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)。

下次我一定会发布完整的代码!