2

我正在尝试构建一个单页应用程序并且遇到 Rails 路由问题。基本上我希望管理路由中的所有内容都到管理控制器索引,但 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' 块向上移动。它匹配 /admin/users

看起来我指定的约束块根本不起作用。

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 块,我已经设法让它工作但是如果 html 块在顶部。它仍然给我带来问题。但我认为现在对我来说已经足够好了。多谢你们

原来的问题是我用了request.xhr?在我应该使用 response_to 的控制器中

当我转到 /admin/users 时,更新 2 Uhm 现在无法正常工作,我收到了一个不可接受的错误。我认为第一条规则不会匹配并匹配第二条规则。

4

1 回答 1

3

如果您将 json 块向上移动并为每个 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
于 2012-09-02T11:58:01.837 回答