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
答案 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”。