我正在尝试构建一个单页应用程序,但在 Rails 路由方面遇到了问题。基本上我想要管理路由中的所有内容到管理 Controller 索引,但 json rails 到特定资源。我试过了
namespace :admin do
constraints :format => 'html' do
match '*path' => 'admin#index'
end
constraints :format => 'json' do
resources :user, :items
end
end
在这种情况下,路径将贪婪地匹配并匹配/admin/users.json 如果我将 :format => 'json' block 向上移动。它匹配/admin/users
看起来我指定的约束 block 根本不起作用。
Rails 版本 3.2.6 rake 路线
/admin/*path(.:format) admin/admin#index {:format=>"html"}
admin_users GET /admin/users(.:format) admin/users#index {:format=>"json"}
/* 管理用户和管理项的其他正常资源路由 */
我检查过,没有路由/admin/users(.format) admin/users#index {:format=>"html"}
看来这正是我所想的。但不知何故仍然不起作用
更新: 如果将 json block 向上移动,我已经设法使其正常工作 但是如果 html block 位于顶部。它仍然给我带来问题。但我认为现在对我来说已经足够好了。谢谢大家
原来的问题是我使用了request.xhr?在 Controller 中我应该使用respond_to
更新2 嗯,当我转到/admin/users 时,现在实际上没有工作,我收到了一个 Not Acceptable 错误。我认为第一条规则不会匹配并匹配第二条规则。
最佳答案
如果将 json block 向上移动并使每个 json 资源都强制使用格式段,这是否有效?在 Rails 3.2 中,这是通过将 format 选项设置为 true 来实现的:
namespace :admin do
constraints(format: "json") do
resources :items, format: true
resources :users, format: true
end
constraints(format: "html") do
match "*path" => "admin#index"
end
end
关于ruby-on-rails - rails 布线格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12233101/