【发布时间】:2011-01-21 12:50:38
【问题描述】:
我的 Rails 3 应用程序具有三个自定义控制器,用于我的 Devise + OmniAuth 集成。我需要覆盖用户注册和会话的标准方法,如“新”。我特别需要控制器方法来处理与 JSON 格式兼容的重定向和响应。
在我的 routes.rb 文件中,我有以下内容:
devise_for :users, :controllers => {
:omniauth_callbacks => "users/omniauth_callbacks",
:registrations => "users/registrations",
:sessions => "users/sessions"
}
按预期工作。我的路由现在显示自定义控制器路由,例如:
new_user_session GET /users/sign_in(.:format) {
:action =>"new",
:controller =>"users/sessions"
}
new_user_registration GET /users/sign_up(.:format) {
:action=>"new",
:controller=>"users/registrations"
}
要为资源设置默认格式,我会这样做:
resources :users, :defaults => {
:format => 'json'
}
所以,我尝试了这个:
namespace "users" do
resources :registrations, :defaults => {
:format => 'json' }
resources :sessions, :defaults => {
:format => 'json' }
end
没有按预期工作。我最终选择了这些路线:
new_users_registration GET /users/registrations/new(.:format) {
:format=>"json",
:action=>"new",
:controller=>"users/registrations"
}
new_users_session GET /users/sessions/new(.:format) {
:format=>"json",
:action=>"new",
:controller=>"users/sessions"
}
为了让它与我在 Devise 中的自定义覆盖一起工作,我需要格式化“new_user_registration”而不是“new_users_registration”。
我检查了 'devise_for' 方法,它没有 :defaults 选项。我可以使用 'devise_scope' 方法来设置各个路由,但这似乎远不如 :defaults 成语简洁。
有谁知道我可以使用什么路由魔法来实现这一点?
【问题讨论】:
标签: json ruby-on-rails-3 devise