路由到控制器中的自定义操作

时间:2014-05-05 17:54:42

标签: javascript ruby-on-rails

我试图添加ajax,在点击div时会显示部分内容。

这个链接:

<h1 id="comments_viewall"><%= link_to "View All", videos_update_comments_path, remote: true%></h1>

我在视频控制器中有自定义方法:

def update_comments
    puts "hello"
end

路线就是这样:

get 'videos/update_comments'

然而,我收到此错误:

GET http://localhost:3000/videos/update_comments 404 (Not Found) 

Started GET "/videos/update_comments" for 127.0.0.1 at 2014-05-05 13:49:02 -0400
Processing by VideosController#show as JS
  Parameters: {"id"=>"update_comments"}
  User Load (0.1ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 1 ORDER BY "users"."id" ASC LIMIT 1
 in show
  Video Load (0.1ms)  SELECT "videos".* FROM "videos" WHERE "videos"."id" = ? LIMIT 1  [["id", "update_comments"]]
 Completed 404 Not Found in 2ms

ActiveRecord::RecordNotFound (Couldn't find Video with id=update_comments):
  app/controllers/videos_controller.rb:94:in `show'

我跟着堆栈溢出问题告诉我要做什么,但它仍然没有工作..

1 个答案:

答案 0 :(得分:2)

get 'videos/update_comments'移到show资源定义的videos路线之上。

例如:

get 'videos/update_comments'
resources :videos

目前,当您对videos/update_comments执行GET请求时,Rails会从routes.rb中找到第一个匹配项并在那里路由请求。因此,它匹配videos/:id路由并将请求路由到VideosController#show操作而不是VideosController#update_comments

您可以在生成的日志中清楚地看到它

Started GET "/videos/update_comments" for 127.0.0.1 at 2014-05-05 13:49:02 -0400
Processing by VideosController#show as JS

通过在update_comments路由之前移动show路由,每当发出videos/update_comments的GET请求时,您的路由中的第一个匹配将为get 'videos/update_comments',请求将被引导至VideosController#update_comments

<强>更新

您还可以在{em> @Addicted 建议的update_comments内定义collection路由,并在评论中提供您已使用resources :videos <定义路线/ p>

  resources :videos do
    collection do
      get 'update_comments'
    end
  end