试图从控制器中获取拥有记录的用户

时间:2013-06-07 13:38:12

标签: ruby-on-rails ruby ruby-on-rails-3.2

我有一个评论控制器,用于其他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,我可以通过电子邮件发送我自己的用户名,但这不是目的。

2 个答案:

答案 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]