Ruby on rails 无法呼叫";当前用户;在使用设计时

Ruby on rails 无法呼叫";当前用户;在使用设计时,ruby-on-rails,devise,Ruby On Rails,Devise,我目前正在开发一个Rails应用程序,该程序支持英语、日语和汉语-根据用户注册的站点,数据库将存储他们的语言(JP=0,EN=1,ZH=2)。对于基于各种操作(预订、更改帐户等)发送给用户的电子邮件,我想呼叫当前用户.language,并根据结果进行如下更改: def set_language if current_user.language = 1 I18n.locale = 'en' elsif current_user.language = 2

我目前正在开发一个Rails应用程序,该程序支持英语、日语和汉语-根据用户注册的站点,数据库将存储他们的语言(JP=0,EN=1,ZH=2)。对于基于各种操作(预订、更改帐户等)发送给用户的电子邮件,我想呼叫
当前用户.language
,并根据结果进行如下更改:

def set_language
    if current_user.language = 1
        I18n.locale = 'en'
    elsif current_user.language = 2
        I18n.locale = 'zh'
    else
    I18n.locale = 'ja'
    end
end
(注意:JP为默认值)

不幸的是,我总是收到以下错误消息:

未定义的局部变量或方法“当前用户”

我还没有找到解决办法

过去,安装了Desive后,我总是可以毫无疑问地称之为Desive——我现在正在进行一个项目,该项目是别人在不久前启动的,我不知道为什么它拒绝工作。请让我知道,如果我可以提供任何进一步的有用点


此外,我还检查了路由,并通过
designe\u for:users
正确设置了designe。当前用户是仅用于控制器/视图的助手。您不能在其他地方使用它,例如您的
ReservationMailer
。在您的情况下,若从控制器调用方法
set\u language
,则可以传递当前值 将用户id设置为
set\u语言
方法

def set_language(user_id)
    current_user = User.find(user_id)

    if current_user.language = 1
        I18n.locale = 'en'
    elsif current_user.language = 2
        I18n.locale = 'zh'
    else
    I18n.locale = 'ja'
    end
end

当前用户
是一种仅对视图和控制器可用的方法。如果要在邮件程序或模型中使用它,则必须显式地将其用作邮件程序方法的参数

在控制器创建方法中:

ReservationMailer.set_language(current_user).deliver
梅勒方法:

def set_language(user)
    if user.language = 1
        I18n.locale = 'en'
    elsif user.language = 2
        I18n.locale = 'zh'
    else
    I18n.locale = 'ja'
    end
end
Mailer视图:

<table>
  <tr>
    <td>name</td>
    <td><%= @user.firstname %><%= @user.firstname  %></td>
  </tr>
  <tr>
    <td>phone no.</td><td><%= @user.phone %></td>
  </tr>
</table>

名称
电话号码。

你的用户类叫什么?它叫“user”其他Desive方法是否工作正常?如果你是说注册等,那么是的-一点问题都没有
current_user
甚至似乎在其他地方使用,这让我很困惑。哦,哇,我觉得这很简单,但不敢相信我以前从来都不知道!谢谢:-)Thanh刚刚告诉了你答案,但你也是对的-这就是问题所在。谢谢:-)