我有一个评论控制器,用于其他2个控制器(任务和票证)。
我在设置评论后尝试通过电子邮件向Ticket的所有者发送电子邮件,以通知他们该Ticket已更新。
def create
@comment = Comment.new(params[:comment])
@comment.user_id = current_user.id
@user = User.find_by_id(params[:ticket_owner])
if @comment.save
TicketMailer.comment_update(@user).deliver
我在故障单显示页面的评论中有一个隐藏字段
<%= simple_form_for(@comment, :html => { :class => 'form-vertical' }) do |f| %>
<%= f.hidden_field :record_id, :value => @ticket.id %>
<%= f.hidden_field :ticket_owner, :value => @ticket.user_id %>
我已经尝试了所有可能的组合来获得我的noob rails知识,这是我最接近的。
NoMethodError in CommentsController#create
undefined method `email' for nil:NilClass
如果我通过@user = current_user,我可以通过电子邮件发送我自己的用户名,但这不是目的。
答案 0 :(得分:0)
试试这个
def create
@comment = Comment.new(params[:comment])
@comment.user_id = current_user.id
@user = User.find_by_id(params[:ticket][:user_id])
if @comment.save
TicketMailer.comment_update(@user).deliver
<%= f.hidden_field :ticket, :id, :name => "ticket[id]", :value => @ticket.id%>
<%= f.hidden_field :ticket, :user_id, :name => "ticket[user_id], :value => @ticket.user_id"%>
答案 1 :(得分:0)
当您使用FormBuilder为模型生成表单时,它会生成名称为“model_name [attribute_name]”的字段。在您的情况下,如果您检查表单部分生成的HTML,您应该看到(大约):
<input type="hidden" name="comment[record_id]" />
<input type="hidden" name="comment[ticket_owner]" />
在控制器中,这些输入会自动分组到散列params[:comment]
中。属性的名称是params[:comment]
哈希上的键,而不是params
哈希。您的控制器的nil
值为params[:ticket_owner]
。相反,您应该寻找params[:comment][:ticket_owner]
。