繁体   English   中英

创建新的实例变量时,为什么在Rails中的表单未设置属性?

[英]Why does my form in Rails not set my attribute when I create a new instance variable?

我试图遵循Jumpstart Labs Rails-Blogger教程,并且试图在创建的文章中添加注释。

这是我create评论时的代码:

def create
    @comment = Comment.create!(comment_params)
    flash.notice = "Your comment was created successfully!"

    redirect_to article_path(@comment.article_id)
end

def comment_params
    article_id = params[:article_id]
    params.require(:comment).permit(:author_name, :body)
end

当我进入文章页面时,尝试通过评论表单提交评论时,出现此错误:

No route matches {:action=>"show", :controller=>"articles", :id=>nil} missing required keys: [:id]

我意识到它找不到与我的评论关联的article_id ,但是我找不到我的错误。 很明显,这不是在我的comment_params方法中正确设置article_id属性,而我的问题是为什么要给article_id一个nil值?

请注意,我也尝试过这样做:

@comment.article_id = params[:article_id] :article_id = params[:article_id]

这些都不起作用。 我曾尝试通过多种方式将article_id用作符号,但它仍为nil值。


编辑:

我认为将其包括在内可能会很有用。 这是本教程的内容:

def create
  @comment = Comment.new(comment_params)
  @comment.article_id = params[:article_id]

  @comment.save

  redirect_to article_path(@comment.article)
end

def comment_params
  params.require(:comment).permit(:author_name, :body)
end

但是,我想改用.create方法,那样它只使用一行。 我的问题是当我尝试设置评论的article_id 那就是失败的.create ,考虑到它会自动保存注释,因此我不知道如何使用.create方法设置article_id


第二编辑

这是用于创建我的评论的表格:

<h3>Post a Comment</h3>

<%= form_for [ @article, @comment ] do |f| %>
  <p>
    <%= f.label :author_name, "Your name" %>
    <br/>
    <%= f.text_field :author_name %>
  </p>

  <p>
    <%= f.label :body, "Your comment" %>
    <br/>
    <%= f.text_area :body %>
  </p>

  <p>
    <%= f.submit 'Submit' %>
  </p>
<% end %>

第三编辑

这是我的错误图片。 请注意,在底部有一个带有正确的article_id的哈希,但是它为article_id分配了一个nil值。

本地主机错误

您的article_id似乎为nil。

首先,您的comment_params方法应如下所示:

def comment_params
    params.require(:comment).permit(:author_name, :body, :article_id)
end

如果您不允许:article_id ,它将被过滤掉并设置为nil。 我怀疑就是这样。

如果这不起作用,请确保您实际上在参数中传递了article_id (请检查服务器日志)。 我想它可能在隐藏的字段或按钮参数中?

要么添加

@comment.article_id = params[:comment][:article_id]

或者只是将article_id添加到您允许的参数中:

params.require(:comment).permit(:author_name, :body, :article_id)

并确保从视图正确发送。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM