是否可以将一个资源(至少只显示,索引)的路由更改为/到最后?
例如:
test.heroku.com/books/1/ #the last / will produce an error
使用Rails 3.0.9
。服务器heroku.com
routes.rb中:
resources :books
错误:
2011-08-06T21:41:35+00:00 app[web.1]: Started POST "/books/1/?ref=bookmarks" for 213.229.110.100 at 2011-08-06 14:41:35 -0700
2011-08-06T21:41:35+00:00 app[web.1]:
2011-08-06T21:41:35+00:00 app[web.1]: ActionController::RoutingError (No route matches "/books/1"):
但是当我将浏览器指向
时http://test.heroku.com/books/1
正在运作
http://test.heroku.com/books/1/
也在努力。
但如果我使用:
http://test.heroku.com/books/1/
作为Facebook应用程序的画布网址无效。
由于
编辑完成错误日志:
2011-08-06T22:07:53+00:00 heroku[web.1]: State changed from starting to up
2011-08-06T22:08:13+00:00 app[web.1]:
2011-08-06T22:08:13+00:00 app[web.1]:
2011-08-06T22:08:13+00:00 app[web.1]: Started POST "/books/1/?ref=bookmarks" for 213.229.110.100 at 2011-08-06 15:08:13 -0700
2011-08-06T22:08:13+00:00 app[web.1]:
2011-08-06T22:08:13+00:00 app[web.1]: ActionController::RoutingError (No route matches "/books/1"):
2011-08-06T22:08:13+00:00 app[web.1]:
2011-08-06T22:08:13+00:00 app[web.1]:
2011-08-06T22:08:13+00:00 app[web.1]:
2011-08-06T22:08:13+00:00 heroku[router]: POST test.heroku.com/books/1/ dyno=web.1 queue=0 wait=0ms service=136ms status=404 bytes=728
2011-08-06T22:08:13+00:00 heroku[nginx]: POST /books/1/?ref=bookmarks HTTP/1.1 | 213.229.110.100 | 904 | http | 404
答案 0 :(得分:2)
如果您正在使用内置的资源路由,那么不会产生错误:
resources :books
如果您已经定义了自定义路由(可能在将2.3应用程序升级到Rails 3的过程中)而没有考虑尾部斜杠,那么您可能不会那么幸运。如果是这种情况并且您不确定如何调整,则应编辑问题并添加路由文件的相关部分(config / routes.rb)。
好的,所以看完你发布的日志输出后,我看到发生了什么。 Facebook正在请求 /books/1/?ref=bookmarks
。这与/books/1/
不同,Rails将其解释为实际上是对/books/1
资源的请求。在这种情况下,为什么还要使用尾随斜杠呢?从规范来讲,它是不准确的,显然它会导致问题。
您可以添加POST /books/1
作为路由到资源丰富的路线,如下所示:
resources :books do
post '/' => :show, :on => :member
end