Ruby on rails 单击链接不会触发该操作
我是RubyonRails的初学者。我正在为练习ruby on rails构建一个电影评论应用程序。在该应用程序中,我为电影添加了投票功能(upvote和downvote) 电影索引 当我点击upvote和downvote(电影#索引)链接时,upvote和downvote操作不会触发。这是投掷错误 没有路由匹配{:action=>“upvote”,:controller=>“votes”} 您的“vows\u controller.rb”已定义MoviesController。是打字错误吗 您还需要定义自定义资源路由。有关在rails中布线的更多信息,请参见 我还建议您创建一个投票模型以供使用Ruby on rails 单击链接不会触发该操作,ruby-on-rails,ruby,routing,Ruby On Rails,Ruby,Routing,我是RubyonRails的初学者。我正在为练习ruby on rails构建一个电影评论应用程序。在该应用程序中,我为电影添加了投票功能(upvote和downvote) 电影索引 当我点击upvote和downvote(电影#索引)链接时,upvote和downvote操作不会触发。这是投掷错误 没有路由匹配{:action=>“upvote”,:controller=>“votes”} 您的“vows\u controller.rb”已定义MoviesController。是打字错误吗 您
resources :votes
投票模式将包括:
id:int
类型:字符串
电影编号:int
鉴于:
link_to 'Upvote', vote_path(movie_id: movie.id, type: 'up'), method: post
link_to 'Downvote', vote_path(movie_id: 42, type: 'down'), method: post
我可能误解了自动生成路径的方法;要查看应用程序中的所有可用路由,请打开终端,导航到rails根文件夹并运行:
耙道
以上链接解释了所有内容我建议仅对电影使用资源定义,此外,对电影使用两条向上投票和向下投票路线:
Rails.application.routes.draw do
resources :votes do
member do
get 'upvote'
get 'downvote'
end
end
end
如果您运行rake routes
,现在您可以获得一个不错的路由列表来管理您的电影,此外还有另外两个路由。在一个控制器的不同操作中处理所有路径
~/dev/rubyonrails/test_app$rake routes
Prefix Verb URI Pattern Controller#Action
upvote_movie GET /movies/:id/upvote(.:format) movies#upvote
downvote_movie GET /movies/:id/downvote(.:format) movies#downvote
movies GET /movies(.:format) movies#index
POST /movies(.:format) movies#create
new_movie GET /movies/new(.:format) movies#new
edit_movie GET /movies/:id/edit(.:format) movies#edit
movie GET /movies/:id(.:format) movies#show
PATCH /movies/:id(.:format) movies#update
PUT /movies/:id(.:format) movies#update
DELETE /movies/:id(.:format) movies#destroy
~/dev/rubyonrails/test_app$
现在,您可以使用路由帮助器(请参见列表中的前缀):
movie
对象在路由路径中带来了:id
属性,因此您知道应该向上或向下投票哪个电影
注意路由器助手名称的单词。这些听起来像是您想要执行的操作:向上投票电影或向下投票电影
向上投票
不是默认定义的操作。您需要手动声明它,或者改用create
。我不使用acts\u as\u votable。我用:upvote和:downvote列生成了投票模型,我不确定这有什么关系resources
声明了通常的REST操作,而upvote
不是其中之一。如何使用链接中的url触发upvote操作?谢谢:)我现在意识到你没有为自定义操作定义路由。这是因为你在定义链接时没有传递任何参数。更新答案哦,谢谢,我可以按照您的格式查看路线名称。我可以通过link传递参数吗?让我们。
link_to 'Upvote', vote_path(movie_id: movie.id, type: 'up'), method: post
link_to 'Downvote', vote_path(movie_id: 42, type: 'down'), method: post
Rails.application.routes.draw do
resources :votes do
member do
get 'upvote'
get 'downvote'
end
end
end
~/dev/rubyonrails/test_app$rake routes
Prefix Verb URI Pattern Controller#Action
upvote_movie GET /movies/:id/upvote(.:format) movies#upvote
downvote_movie GET /movies/:id/downvote(.:format) movies#downvote
movies GET /movies(.:format) movies#index
POST /movies(.:format) movies#create
new_movie GET /movies/new(.:format) movies#new
edit_movie GET /movies/:id/edit(.:format) movies#edit
movie GET /movies/:id(.:format) movies#show
PATCH /movies/:id(.:format) movies#update
PUT /movies/:id(.:format) movies#update
DELETE /movies/:id(.:format) movies#destroy
~/dev/rubyonrails/test_app$
<%= link_to "upvote", upvote_movie_path(movie) %>
<%= link_to "down vote", downvote_movie_path(movie) %>