![](/img/trans.png)
[英]How to call ApplicationController methods from ApplicationHelper
[英]How to call methods in ApplicationController from other controllers?
我有受保護的函數來獲取和設置current_user。
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 = @mailbox.user
相反,您正在設置一個名為current_user的局部變量。 如果要調用控制器方法,則需要說:
self.current_user = @mailbox.user
current_user
方法是實例方法,而不是類方法。 因此,要訪問它,您需要在控制器的實例上調用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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.