nil的未定义方法`movie_reviews':NilClass

时间:2014-02-06 04:42:51

标签: ruby-on-rails ruby-on-rails-4

我制作了一个简单的测试应用来审核电影。我在整个申请过程中遇到此错误。 我已经在模型中设置了继承(使用API​​用于电影数据)和其他标准的东西,但我不知道为什么我会收到此错误。 例如,访问此网址 -

...movies/%23<Tmdb::Movie:0x00000002d30728>/movie_reviews/new

我收到错误

app/controllers/movie_reviews_controller.rb:17:in `new'

def new
 @movie_review = @movie.movie_reviews.new
end

这是关于GH的源代码:https://github.com/Xantax/sample_movies

2 个答案:

答案 0 :(得分:1)

您永远不会在控制器的新操作中设置实例变量@movie。如果之前没有设置,则每个实例变量都返回nil。因此@movie为零,预计会出现此错误。

您应该注意的另一件事是URL。 URL路径应具有数字影片ID,而不是%23<Tmdb::Movie:0x00000002d30728>。这可能会使您无法轻松地在控制器中找到您想要的电影。 如果它是23例如你可以简单地说:

@movie = Movie.find(params[:id])

因为/ movies / 23 / more_reviews / new将23放入params[:id]

希望这可以帮助您找出问题。

答案 1 :(得分:0)

如错误所示,您尝试在nil(未声明的)对象上调用方法

在您的情况下,未声明的对象是@movie,并且意味着您必须以某种方式声明它。解决方案是创建对象(通常使用ActiveRecord方法)。如Erez所述,您可以使用:

@movie = Movie.find(params[:id])