gpt4 book ai didi

ruby-on-rails - 如何从其他 Controller 调用 ApplicationController 中的方法?

转载 作者:太空宇宙 更新时间:2023-11-03 17:23:50 24 4
gpt4 key购买 nike

我有获取和设置 current_user 的 protected 函数。

class ApplicationController < ActionController::Base
protected
def current_user
@current_user ||= User.find_by_id(session[:user_id])
end

def current_user=(user)
@current_user = user
session[:user_id] = user.nil? ? user : user.id
end
end

但是,当我登录时,没有调用 current_user= 方法。

class UsersController < ApplicationController
def sign_in
if (@mailbox = Mailbox.find_by(email: params[:email], password: params[:password]))
current_user= @mailbox.user
redirect_to mailboxes_path
else
redirect_to :root
end
end
end

另外,current_user的值在其他类中为nil。如何确保调用 ApplicationController 中定义的方法?

最佳答案

current_user 方法是一个实例 方法,而不是一个 方法。因此,要访问它,您需要调用 Controller 的实例上的方法,即self:

self.current_user = @mailbox.user

为了进一步说明,请比较以下内容:

# This is a class method
def self.foo
return 'bar'
end

# This is an instance method
def foo
return 'bar'
end

前一个方法在类上,而后者在类的一个实例上。因此,它们分别以如下方式被调用:

# Invoking the class method
foo
#=> bar

# Invoking the instance method
self.foo
#=> bar

关于ruby-on-rails - 如何从其他 Controller 调用 ApplicationController 中的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20599528/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com