【问题标题】:Rails Multiple URI Pattern for the same Devise Model同一设计模型的 Rails 多个 URI 模式
【发布时间】:2016-01-13 14:32:29
【问题描述】:

我在我的项目中使用了 Devise,我最初是在 2013 年使用 API 版本 1 (api/v1/) 开始使用它的。我不必创建版本 2 (api/v2/),并且在弄清楚如何为设计创建新的 v2 路由时遇到问题。

/api/v1/ 和 /api/v2/ 都指向同一个用户模型,但我让它们通过不同的控制器。目前下面是我正在尝试的,但我收到消息“无效的路由名称,已在使用:'new_user_session'”。

/api/v1/ 的作用域路由

scope '/api' do
   scope '/v1' do
       devise_for :users, :controllers => {:registrations => "devise/v1/users_registrations",
                                      :sessions => "devise/v1/users_sessions",
                                      :passwords => "devise/v1/users_passwords"}
   end
end

/api/v2/ 的作用域路由

scope '/api' do
   scope '/v2' do
       devise_for :users, :controllers => {:registrations => "devise/v2/users_registrations",
                                      :sessions => "devise/v2/users_sessions",
                                      :passwords => "devise/v2users_passwords"}
   end

我们将不胜感激任何和所有的帮助。谢谢

【问题讨论】:

    标签: ruby-on-rails api devise routes


    【解决方案1】:

    您需要在旁边使用namespace 或代替范围。

    现在这些范围将更改文件本身的位置,但不会更新实际路径名称,因此您会遇到重复错误。

    I.E.

    scope :api do
       namespace :v1 do
           devise_for :users, controllers: {registrations: "devise/v1/users_registrations",
                                          sessions: "devise/v1/users_sessions",
                                          passwords: "devise/v1/users_passwords"}
       end
    end
    
    
    
    scope :api do
       namespace :v2 do
           devise_for :users, controllers: {registrations: "devise/v2/users_registrations",
                                          sessions: "devise/v2/users_sessions",
                                          passwords: "devise/v2/users_passwords"}
       end
    end
    

    那么您的路线将是new_v1_user_sessionnew_v2_user_session,等等...

    【讨论】:

    • 谢谢,这确实让我摆脱了无效的路由名称问题,但我又遇到了另一个问题。在 devises helpers.rb devise_parameter_sanitizer 中,似乎期望参数与密钥“v1_user”一起出现,但密钥仍然是“用户”。 Devise::ParameterSanitizer.new(resource_class, resource_name, params) 这里的resource_name 是'v1_user' 并且params 包含键'user' 所需的所有信息。知道发生了什么吗?我可能需要为此提出一个新问题。
    • 为这个问题打开一个新问题,我会帮你深入研究
    • 将cmets中的链接添加到我可以找到。
    • 刚刚在这里打开了新问题,stackoverflow.com/q/34776486/703910 谢谢!
    猜你喜欢
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    • 2023-03-07
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多