use*_*247 6 ruby ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2
嗨,我必须访问我的动作邮件程序中的当前用户,但我收到以下错误
undefined local variable or method `current_user' for #<WelcomeMailer:0xa9e6b230>
Run Code Online (Sandbox Code Playgroud)
通过使用此链接,我使用应用程序帮助程序来获取当前用户.这是我的WelcomeMailer
class WelcomeMailer < ActionMailer::Base
layout 'mail_layout'
def send_welcome_email
usr = find_current_logged_in_user
Rails.logger.info("GET_CURRENT_USER_FROM_Helper-->#{usr}")
end
end
Run Code Online (Sandbox Code Playgroud)
我的应用程序助手如下
def find_current_logged_in_user
#@current_user ||= User.find_by_remember_token(cookies[:remember_token])
# @current_user ||= session[:current_user_id] && User.find_by_id(session[:current_user_id])
Rails.logger.info("current_user---> #{current_user}")
current_user
end
Run Code Online (Sandbox Code Playgroud)
我也尝试过session和cookies.那么我该如何解决这个错误,或者是否有其他方法来访问动作邮件程序中的当前用户.我在用Rails 3.2.14 and ruby ruby 2.1.0
inf*_*sed 13
不要试图current_user从梅勒内部访问.相反,将用户传递给邮件程序方法.例如,
class WelcomeMailer < ActionMailer::Base
def welcome_email(user)
mail(:to => user.email, :subject => 'Welcome')
end
end
Run Code Online (Sandbox Code Playgroud)
要在控制器中使用它,您可以访问current_user:
WelcomeMailer.welcome_email(current_user).deliver
Run Code Online (Sandbox Code Playgroud)
从模型中:
class User < ActiveRecord::Base
after_create :send_welcome_email
def send_welcome_email
WelcomeMailer.welcome_email(self).deliver
end
end
Run Code Online (Sandbox Code Playgroud)