【问题标题】:Custom actions using devise使用设计的自定义操作
【发布时间】:2016-09-17 10:07:33
【问题描述】:

背景:

我正在开发的 Rails 4 应用程序有不同的 API 和 Web 注册逻辑,其中一部分逻辑使它们的集成变得极其困难。为此,我试图分离处理由继承、新的 reCAPTCHA gem 和新逻辑引起的问题的路线。 (这两个动作都在各自的逻辑之后调用registrations#create。)我已经解决了将这两者分开所产生的大部分问题;然而,事实证明,让路线正常运行也很困难。

非常感谢任何帮助!


期望的结果:

我正在尝试使用 Devise 定义到自定义操作的路由,并阻止它创建默认路由。我已经让其中一个工作,但不是第二个。这是我的 routes.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_for 时。


总结一下:

  • 我需要禁用默认的users/registrations#create路由
  • 并指定自定义操作的路由 (users/registrations#custom_one)
  • 使用正确的前缀/名称 (user_registration)

希望尽可能优雅,因为我宁愿避免单独指定每条路线。

【问题讨论】:

    标签: ruby-on-rails ruby devise routes


    【解决方案1】:

    您可以通过使用 devise_for 的 :skip 选项来实现:

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

    【讨论】:

    • 好吧,这引导我找到解决方案。
    • 好吧,我们在这里所做的是使用跳过选项禁用设计的默认注册路由并创建我们自己的我想你应该尝试一下,如果出现任何错误或任何问题,那么你可以一如既往在这里评论。
    • 正是我给你的get "/admin" => "devise/registrations#new", :as => :new_user_registration post "/admin" => "devise/registrations#create", :as => :user_registration post '/users', to: 'users/registrations#custom_one'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-29
    • 1970-01-01
    相关资源
    最近更新 更多