如何在#show错误中修复NoMethodError?

时间:2013-04-18 03:36:41

标签: ruby-on-rails routing

我正试图通过以下链接访问特定评论:

<%= link_to "Full Review", review_path(review) %><

show.html.erb:

 <%= @review.pro %>

reviews_controller.rb:

def show 
    @review = Review.find(params[:id])
end

我在评论表中有一个名为pro的列,如此处的迁移文件所示:

class CreateReviews < ActiveRecord::Migration
def change
  create_table :reviews do |t|
    t.string :pro
    t.string :con
    t.string :advice
    t.string :date
    t.string :role
    t.string :company

    t.timestamps
  end
end

我得到的错误是:

undefined method `pro' for nil:NilClass
Extracted source (around line #1):

1: <%= @review.pro %>

即使我在show方法中包含'puts @review',rails控制台也不会返回任何内容。关于如何解决这个问题的任何建议?

在show方法中手动包含Review.find(1)时更新:

由ReviewsController处理#show as HTML   参数:{“id”=&gt;“1”}   在布局/应用程序中呈现评论/ show.html.erb(0.9ms) 在3毫秒内完成500内部服务器错误

ActionView :: Template :: Error(未定义方法pro' for nil:NilClass): 1: <%= @review.pro %> app/views/reviews/show.html.erb:1:in _ app_views_reviews_show_html_erb ___ 648582160945665650_70143359368840'

2 个答案:

答案 0 :(得分:0)

似乎您的@review变量为零。 (可能你可能在这一行Review.find(params[:id])

中得不到匹配的记录

避免此错误的一种方法是

<%= @review.try(:pro) %>

答案 1 :(得分:0)

Nil异常是最难调试的。你必须像@ sameera207所暗示的那样“跟随Nil”。

在您的控制器中,尝试

def show 
  @review = Review.find(params[:id])
  logger.info "Review: #{@review}"
  logger.info "Review is nil? #{@review.nil?}"
end

如果您的log/development.log显示Review is nil?: true,那么您找不到合适的记录。您的参数也应显示在您的日志文件中。