没有ID就找不到电影

时间:2014-02-06 13:29:48

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

App有2个简单模型,我使用TMDb api。电影& MovieReviews。当我尝试访问此网址时

localhost:3000/movies/%23<Tmdb::Movie:0x007ff0608f4398>/movie_reviews/new

我应该看到提交评论的表单,我收到错误。此外,网址似乎有点糟糕。我怎样才能获得电影ID?它还显示

 parameters:
 {"movie_id"=>"#<Tmdb::Movie:0x007ff0608f4398>"}

这是MovieReviewsController#new

def new
  @movie = Movie.find(params[:id])
  @movie_review = @movie.movie_reviews.new
end

Source code

2 个答案:

答案 0 :(得分:0)

我认为你有几个问题:

localhost:3000/movies/%23<Tmdb::Movie:0x007ff0608f4398>/movie_reviews/new这永远不会奏效。 Tmdb::Movie:0x007ff0608f4398是类实例的内部对象id。该网址应该看起来像localhost:3000/movies/1/movie_reviews/new。这将允许您向id为1

的电影添加新评论

在config / routes.rb文件中,您已明确声明了几个URL,并在其他资源之上添加了根路由。根路由应始终是最后声明的路由。此get "movies/show"get "movies/index"路由已由resources :movies处理,因此您可以将其删除。

路由文件应如下所示:

SampleMovies::Application.routes.draw do 
  resources :movie_reviews
  resources :movies do
    resources :movie_reviews
  end

  root 'movies#index'
end

查看适合您应用的所有可用路线。转到项目目录并键入:rake routes它将显示所有可用的URL和必需参数。

PS查看其余的代码,我强烈建议您查看:http://guides.rubyonrails.org/getting_started.html这是关于rails基础知识的最佳教程。

答案 1 :(得分:0)

请替换

<%= link_to "Review it!", new_movie_movie_review_path(@movie) %>

通过

<%= link_to "Review it!", new_movie_movie_review_path(@movie.id) %>

问题是你不参考电影ID而是电影对象。这就是你有一个奇怪的URL参数的原因。

更改后,您必须调整MovieReviewsController。

但是请小心,我看到你正在尝试使用“电影评论”。当我查看您提供的有关Tmdb API的链接时,我可以阅读“Missing Resources:Review”。