小编Sam*_*dra的帖子

为什么ActiveRecord回调要求实例变量或实例方法以self关键字为前缀?

ActiveRecord有一些不同的回调方法用于简化模型逻辑.例如after_findbefore_create方法.

考虑以下代码示例:

class ExternalPrintingCard < ActiveRecord::Base
  belongs_to :user
  belongs_to :ph_user

  after_create :change_pin

  def change_pin
    self.user.randomize_printer_pin
  end

  def after_find
    return if self.card_status == false
    self.card_status = false if self.is_used_up?
    self.card_status = false if self.is_expired?
    self.save!
  end
end
Run Code Online (Sandbox Code Playgroud)

如果我self从实例变量或实例方法中删除所有前缀,那么将调用这两个回调,但就好像它们是这些回调方法中的局部变量一样.

这个实例变量(card_status),实例方法(save!,is_used_up?is_expired?)和association(user)在没有self前缀的这两个回调方法之外工作正常.

Rails文档中用于回调方法(实例方法)的示例代码似乎总是使用self前缀,即使它正在调用实例变量或方法,正确地说它们可以在没有self前缀的情况下访问.

我希望有更好理解ActiveRecord回调的人可以帮助揭示这种行为.

干杯

activerecord ruby-on-rails

18
推荐指数
2
解决办法
2947
查看次数

标签 统计

activerecord ×1

ruby-on-rails ×1