Railsモデルでゲッター/セッターのペアをテストしたところ、いつも奇妙で一貫性がないと思っていた動作の良い例を見つけました。
この例では、を扱っていclass Folder < ActiveRecord::Base
ます。
Folder belongs_to :parent, :class_name => 'Folder'
getterメソッドで、次を使用する場合:
def parent_name
parent.name
end
...また...
def parent_name
self.parent.name
end
...結果はまったく同じです。親フォルダーの名前を取得します。ただし、getterメソッドで使用する場合は...
def parent_name=(name)
parent = self.class.find_by_name(name)
end
...親はnilになりますが、使用すると...
def parent_name=(name)
self.parent = self.class.find_by_name(name)
end
...その後、それは機能します。
だから、私の質問は、なぜあなたは時々self.methodを宣言する必要があるのですか、そしてなぜあなたはただローカル変数を使うことができるのですか?
ActiveRecordでの使用/使用にself
一貫性がないようですが、これをもっとよく理解したいので、自分を宣言する必要があるかどうかを常に推測しているような気がしません。ActiveRecordモデルでselfを使用すべき/使用すべきでないのはいつですか?