如何调试"NoMethodError in Articles#show"?



我正在尝试制作Ruby在Rails上的迷你博客,我尝试在显示页面上添加评论区域。

错误日志

app/views/articles/show.html.erb:23:in `_app_views_articles_show_html_erb___2446915211162750512_70356611527980'
Started GET "/articles/9" for 127.0.0.1 at 2019-02-15 10:26:34 +0900
Processing by ArticlesController#show as HTML
  Parameters: {"id"=>"9"}
  Article Load (0.6ms)  SELECT  "articles".* FROM "articles" WHERE (9) LIMIT ?  [["LIMIT", 1]]
  ↳ app/controllers/articles_controller.rb:11
  Rendering articles/show.html.erb within layouts/application
  Comment Load (0.4ms)  SELECT "comments".* FROM "comments" WHERE "comments"."article_id" = ?  [["article_id", 7]]
  ↳ app/views/articles/show.html.erb:10
  Rendered articles/show.html.erb within layouts/application (9.3ms)
Completed 500 Internal Server Error in 25ms (ActiveRecord: 2.0ms)

ActionView::Template::Error (undefined method `comments' for nil:NilClass):
    20: 
    21: <hr>
    22: <h2> コメント追加 </h2>
    23: <%= form_for([@article, @comment.comments.build]) do |f| %>
    24: <p>
    25:   <%= f.label :commenter %><br>
    26:   <%= f.text_field :commenter %>
app/views/articles/show.html.erb:23:in `_app_views_articles_show_html_erb___2446915211162750512_70356603691620'

/app/views/articles/show.html.erb

<h2> コメント追加 </h2>
<%= form_for([@article, @comment.comments.build]) do |f| %>
<p>
  <%= f.label :commenter %><br>
  <%= f.text_field :commenter %>
</p>
<p>
  <%= f.label :body %><br>
  <%= f.text_area :body %>
</p>
<p>
  <%= f.submit %>
</p>
<% end %>

我在使用.build而不是.new

时尝试编码评论

/app/controllers/comments_controller.rb

class CommentsController < ApplicationController
  def create
    @article = Article.find_by(params[:article_id])
    @comment = @article.comments.create(comment_params)
    redirect_to article_path(@article)
  end
private
  def comment_params
    params.require(:comment).permit(:commenter, :body)
  end
end

您能帮我吗?

我认为您在这里的问题 @ryment.comments.build以来@Article has_many注释,首先您创建@Comment是nil,并且错误显示该错误

<%= form_for([@article, @comment.comments.build]) do |f| %>

您可以更改为

<%= form_for([@article, @article.comments.build]) do |f| %>

最新更新