ActiveRecordには、モデルロジックを単純化するために使用されるいくつかの異なるコールバックメソッドがあります。例えば、after_find
およびbefore_create
の方法。ActiveRecordコールバックで、インスタンス変数またはインスタンスメソッドの先頭にselfキーワードが必要なのはなぜですか?
このコードの例を考えてみましょう:
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
プレフィックスを削除すると、これら2つのコールバックが呼び出されますが、彼らはこれらのコールバック内のローカル変数であるかのようにそれがありますメソッド。
このインスタンス変数(card_status
)、インスタンスメソッド(save!
、is_used_up?
とis_expired?
)と会合(user
)はself
接頭することなく、これらの2のコールバックメソッドの外にうまく働きました。
コールバックメソッド(インスタンスメソッド)のためのRailsのドキュメントのサンプルコードは、self
プレフィックスが通常はなくアクセス可能なインスタンス変数またはメソッドを呼び出していても、常にself
接頭辞を使用しているようです。
ActiveRecordコールバックをよく理解している人が、この動作を明らかにしてくれることを願っています。
乾杯
多くの詳細については、Thoughtbotの記事を参照してください。http://robots.thoughtbot.com/post/185504560/to-self-or-not-to-self –
http://www.rubyfleebieを説明する別の記事。 com/use-self-explicit / –