对于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
答案 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!