ご説明ありがとうございます。
理解ができました。
Like!
Railsの参考書を読みながら勉強を進めていたらメソッド内にselfが出てきたので自分で理解しようとしたのですがなかなか理解できず記事にしてみました。
コールバックの実装をしていたらメソッド内にselfが出てきた…
class Task < ApplicationRecord
before_validation :set_nameless_name
#省略
private
def set_nameless_name
self.name = '名前なし' if name.blank?
end
end
ここではnameの値が入力されていないとき「名前なし」という値を自動でつけるようにしています。
下記の記事を参考にしてみました。
https://qiita.com/suzuki-koya/items/1553c405beeb73f83bbc
しかし、理解ができず今思うことはどうしてここにselfをつける意味があるのか
nameだけではいいのでは?と思います。
分かりづらい記事になってしまいましたが、心優しい方コメントいただけたら幸いです。
・ 現場で使える Ruby on rails 5 速習実践ガイド
ご説明ありがとうございます。
理解ができました。
単純に
rubyは柔軟なのでソースを読まないとどれに当たるのかはパッと見わからないかもしれません。
pry gemを入れて途中途中でp self
とか色々やってみるとわかり易いかも。
class A
attr_accessor :name
def method1(name)
# インスタンス変数nameにローカル変数nameを割り当てる
@name = name
# @nameと同じ インスタンス変数nameにローカル変数nameを割り当てる
self.name = name
# これはローカル変数nameにローカル変数nameを割り当てるんで意味がない
# name = name
end
def method2(text)
# @もself.もなければただ単にローカル変数nameにtextを割り当ててるだけ
name = text
end
end
class B
def name=(text)
# インスタンス変数をその場で作ってる
@name = text
# これは出来ない 上の例では[attr_accessor :name]でname=メソッドが自動挿入されていたので出来た
# https://docs.ruby-lang.org/ja/latest/method/Module/i/attr_accessor.html
# self.name = text
end
def method1(text)
# この場合はメソッドとしてのname=を呼んでる
# ローカル変数に割り当てているようでそうではない
name = text
end
end