使用设计

时间:2016-09-17 10:07:34

标签: ruby-on-rails ruby devise routes

背景

我正在开发的Rails 4应用程序具有不同的API和Web注册逻辑,而且这种逻辑的一部分使得它们的集成非常困难。为此,我试图分离路由来处理继承,新的reCAPTCHA gem和新逻辑引起的问题。 (两个动作都按照各自的逻辑调用registrations#create。)我已经解决了将这两个分开的大部分问题;然而,使路线工作也很困难。

我非常感谢任何帮助!

期望的结果:

我尝试使用Devise定义到自定义操作的路由,并阻止它创建默认路由。我让其中一个工作,但不是第二个。这是我的路线的摘录.rb:

Registry::Application.routes.draw do
  devise_for :user,
             controllers: {
               passwords:     'users/passwords',
               sessions:      'users/sessions',
               registrations: 'users/registrations'
             }

  devise_scope :user do
    post 'users', to: 'users/registrations#custom_one'
  end

  # ...

  namespace :api do
    namespace :v1 do
      # ...
      devise_scope :user do
        post 'users', to: 'registrations#custom_two'
      end
    end
  end
end

的问题:

问题是此代码生成两条几乎完全相同的路由。摘录自rake routes

user_registration POST   /users(.:format)         users/registrations#create
            users POST   /users(.:format)         users/registrations#custom_one
     api_v1_users POST   /api/v1/users(.:format)  api/v1/registrations#custom_two

我还希望自定义路由具有正确的前缀/路由名称(user_registration),但我无法执行此操作。

我发现了大量关于Devise路由的自定义名称的文档,但没有找到自定义操作的文档。特别是在使用devise_for

总结:

  • 我需要停用默认的users/registrations#create路线
  • 并指定自定义操作的路由(users/registrations#custom_one
  • 使用正确的前缀/名称(user_registration
希望尽可能优雅,因为我宁愿避免单独指定每条路线。

1 个答案:

答案 0 :(得分:1)

您可以使用:skip选项来设计devise_for:

devise_for :users, :skip => [:registrations] do
    get "/admin" => "devise/registrations#new", :as => :new_user_registration
    post "/admin" => "devise/registrations#create", :as => :user_registration
end