我是rails的新手,我正在尝试创建一个新的路线来执行操作。
目前我在路线中定义了以下内容
match 'books/scrape_data' => 'books#scrape_data', :via => :get
以及以下操作
def scrape_data
@books = Book.all
@books.each do |book|
# do stuff
end
redirect_to :action => 'list'
end
但是这条路线似乎用以下方式进行了show动作:id'scrape_data'。
有人能指出我正确的方向吗?
答案 0 :(得分:3)
听起来你必须有一个路线定义,例如resources :books
,它出现在你问题中列出的路线之前。由于路线是自上而下解析的,因此书籍#show route会截取您的路线并将scrape_data
分组到ID中。运行bundle exec rake routes
以查看已定义路由的顺序。
简单的解决方法是将您的路线移到resources :books
以上。但实际上更正确的做法是摆脱你的自定义路线并将其添加到资源块中,如下所示:
resources :books do
get 'scrape_data', on: :collection
end
在此之后,再做一次bundle exec rake routes
并查看这是否是你想要的。
答案 1 :(得分:0)
请原谅“回答”,但我没有代表发表评论。
我的资源与所有与路由相关的资源都是Routing from the outside in
运行bundle exec rake routes
以查看您的路线及其嵌套方式。然后你会看到你的参数是否匹配(与嵌套路线的常见错误)。
答案 2 :(得分:0)
您还可以访问:
查看所有路线http://localhost:3000/rails/info/routes
这可能非常有用,而不必杀死您的服务器并使用控制台。