1. ホーム
  2. ruby-on-rails

[解決済み] モデルでselfを使うタイミングは?

2023-08-18 02:52:54

質問

質問:Railsのモデルでselfを使う必要があるのはどんなときですか?

私は set メソッドがあります。

class SomeData < ActiveRecord::Base
  def set_active_flag(val)
    self.active_flag = val
    self.save!
  end
end

これを実行すると、すべてがうまくいきます。しかし、こうすると

class SomeData < ActiveRecord::Base
  def set_active_flag(val)
    active_flag = val
    save!
  end
end

active_flagの値は変化せず、むしろ無言で失敗します。誰か説明してください。

私は重複を見つけることができませんが、誰かが1つを見つけるなら、それも結構です。

どのように解決するのですか?

メソッドを呼び出しているインスタンスに対してアクションを行う場合、selfを使用します。

このコードで

class SocialData < ActiveRecord::Base
  def set_active_flag(val)
    active_flag = val
    save!
  end
end

active_flag という全く新しいスコープ付きローカル変数を定義し、渡された値に設定します。それは何にも関連付けられていないので、メソッドが終了すると、存在しなかったかのようにすぐに捨てられます。

self.active_flag = val

しかし、インスタンスは全く新しい変数ではなく、active_flagという独自の属性を変更するように指示します。それが動作する理由です。