最初のコード ( selfを使用) は機能するのに、2 番目のコードは機能しないのはなぜですか?
category_uri
モデルの属性です
def set_uri
self.category_uri = self.category_uri.join('-').downcase
self.save!
end
セルフなし
def set_uri
category_uri = category_uri.join('-').downcase
save!
end
最初のコード ( selfを使用) は機能するのに、2 番目のコードは機能しないのはなぜですか?
category_uri
モデルの属性です
def set_uri
self.category_uri = self.category_uri.join('-').downcase
self.save!
end
セルフなし
def set_uri
category_uri = category_uri.join('-').downcase
save!
end
2 番目のケースでは、インタープリターはcategory_uri = ...
ローカル変数の代入として扱います。そのため、setter メソッド (末尾に があるメソッド) を呼び出したい場合=
は、 を使用する必要がありますself
。
def set_uri
self.category_uri = self.category_uri.join('-').downcase
self.save!
end
メソッド「set_uri」は instance.set_uri のように呼び出されるため、この場合、「self」はメソッドを呼び出すインスタンスに設定されます。しかし、'self' のない 2 番目のコードでは、'category_uri' は実際にはローカル変数として扱われます。実際、この場合、Ruby は「self」をインスタンスが呼び出すのではなく、メソッド自体に非明示的に設定するため、機能しません。