Rails同一个Devise模型的多个URI模式

时间:2016-01-13 14:32:30

标签: ruby-on-rails api devise routes

我在我的项目中使用了Devise,我最初在2013年使用API​​ Version 1(api / v1 /)启动了它。我没有必要创建版本2(api / v2 /),而且我在解决如何为设计创建新的v2路由时遇到问题。

/ api / v1 /和/ api / v2 /都指向相同的用户模型,但我让它们通过不同的控制器。目前以下是我正在尝试的内容,但我收到消息"无效的路线名称,已在使用中:' new_user_session'"。

The controller setup

/ 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

非常感谢任何和所有帮助。谢谢

1 个答案:

答案 0 :(得分:1)

您需要同时使用namespace或代替范围。

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

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等等......