ruby-on-rails - Ruby 中方法名与@的混淆
天蓬老师
天蓬老师 2017-04-22 09:00:26
0
3
573
module SessionsHelper
  .
  .
  .

  # Returns the user corresponding to the remember token cookie
  def current_user
    if (user_id = session[:user_id])
      @current_user ||= User.find_by(id: user_id)
    elsif (user_id = cookies.signed[:user_id])
      user = User.find_by(id: user_id)
      if user && user.authenticated?(cookies[:remember_token])
        log_in user
        @current_user = user
      end
    end
  end

  # Returns true if the user is logged in, false otherwise
  def logged_in?
    !current_user.nil?
  end

  # Logs out the current user
  def log_out
    forget(current_user)
    session.delete(:user_id)
    @current_user = nil
  end
end

最后两个 def 中的 current_user 到底指的是什么?是上面定义的 current_user 方法吗?
而以上代码中的 @current_user 又指的是什么?感觉有点混淆了,求解答。

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全員に返信(3)
迷茫

@current_user はインスタンス変数、current_user はこのモジュールのメソッド、current_user を呼び出す最後の 2 つのメソッドは、上記の current_user メソッドの呼び出しを参照します。 同じクラス内のインスタンス メソッドは、メソッド名を使用して直接呼び出すことができます。
@current_user は、current_user メソッドの戻り値です。最後の 2 つのメソッドは current_user メソッドを呼び出し、実際にインスタンス変数 @current_user を取得します

いいねを押す +0
迷茫

@current_userはグローバルクラスの変数、current_userはメソッド名、Rubyではメソッドを呼び出す際に()が省略できるので初心者が混乱しやすい、@current_userの値はnil(@xxxで初期化される値はnil) または current_user が値を返します。

いいねを押す +0
黄舟

これを補うために、current_user实际上代指current_user这个方法返回的@current_user实例变量。因为这里我们获得的是current_user呼び出し後の戻り値。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!