gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 13:32:45 24 4
gpt4 key购买 nike

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

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

在没有 card_status前缀的这两种回调方法之外,此实例变量( save!),实例方法( is_used_up?is_expired?user)和关联( self)都可以正常工作。

Rails文档中用于回调方法(实例方法)的示例代码似乎总是使用 self前缀,即使它正在调用实例变量或方法,也可以正常使用 self前缀来访问它们。

我希望对ActiveRecord回调有更好了解的人可以帮助您了解这种行为。

干杯

最佳答案

从技术上讲,您只需要在分配方法之前使用self。
区分带有尾随=的实例方法和分配给局部变量的方法是必要的。

关于ruby-on-rails - 为什么ActiveRecord回调要求实例变量或实例方法以self关键字作为前缀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1496380/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com