0

我有一个 Comments 控制器,用于其他 2 个控制器(任务和票证)。

一旦创建评论以通知他们票证已更新,我正试图让它通过电子邮件发送给票证的所有者。

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,我可以让它通过电子邮件发送我自己的用户名,但这不是目的。

4

2 回答 2

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"%>
于 2013-06-07T13:48:43.787 回答
0

当您使用 FormBuilder 为模型生成表单时,它会生成名称类似于“model_name[attribute_name]”的字段。在您的情况下,如果您检查表单部分生成的 HTML,您应该看到(大约):

<input type="hidden" name="comment[record_id]" />
<input type="hidden" name="comment[ticket_owner]" />

在控制器中,这些输入会自动分组到 hash 中params[:comment]。属性的名称是params[:comment]散列上的键,而不是params散列。您的控制器正在nil获得params[:ticket_owner]. 相反,您应该寻找params[:comment][:ticket_owner].

于 2013-06-07T13:57:40.227 回答