使用设计方法' current_user'在邮件中

时间:2015-10-23 22:03:57

标签: ruby-on-rails devise

对于rails来说相对较新,我一直在使用设计认证gem一段时间,但我的问题是,我的应用程序发送一封电子邮件,填写表单后,当前用户的名字和姓氏,但每个时间我尝试发送带有上述参数的电子邮件,我得到一个错误,上面写着"未定义的方法current_user" 我的邮件看起来像这样,请注意:它是一个独立的控制器来控制它。

<table>
<tr>
<td>name</td><td><%= current_user.firstname %><%=current_user.firstname  %></td>

<tr>

        <td>phone no.</td><td><%= current_user.phone %></td>

    </tr>

    <tr>

        <td>location</td><td><%= @device.location %></td>

    </tr>

    <tr>

        <td>device type</td><td><%= @device.device_type %></td>

    </tr>

    <tr>

        <td>brand</td><td><%= @device.brand %></td>

    </tr>

</table>

我的控制器操作就是这个

def create

    @user=current_user

    @device = Device.new(device_params)

        if @device.save

            DeviceMailer.send_device.deliver

            flash[:notice] = 'Request sent successfully,you will be

很快联系了&#39;             其他                 flash [:error] =&#39;请求未发送,检查详细信息并发送&#39;                 渲染&#39;新&#39;             端

end

2 个答案:

答案 0 :(得分:1)

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

在控制器内创建方法:

DeviceMailer.send_device(current_user, @device).deliver

梅勒方法:

def send_device(user, device)
  @user = user
  @device = device
  # More code as needed
end

梅勒观点:

<table>
  <tr>
    <td>name</td>
    <td><%= @user.firstname %><%= @user.firstname  %></td>
  </tr>
  <tr>
    <td>phone no.</td><td><%= @user.phone %></td>
  </tr>
  <tr>
    <td>location</td><td><%= @device.location %></td>
  </tr>
  <tr>
    <td>device type</td><td><%= @device.device_type %></td>
  </tr>
  <tr>
    <td>brand</td><td><%= @device.brand %></td>
  </tr>
</table>

答案 1 :(得分:0)

登录时设置current_user。为了在用户执行控制器操作之前强制用户登录,您需要在控制器顶部放置以下行:

before_action :authenticate_user!