难以定义Rails路由

时间:2014-06-27 03:05:31

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

我是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'。

有人能指出我正确的方向吗?

3 个答案:

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

这可能非常有用,而不必杀死您的服务器并使用控制台。