ruby-on-rails - Rails : After putting devise routes in namespace, 模型名称以命名空间为前缀。如何删除它?

标签 ruby-on-rails ruby devise

我在我的 Rails RESTFul API 服务中使用 devise 进行身份验证。 Devise 使我能够使用 [POST] http://domain/users 和 form_data 创建一个新用户:

[user]password = 123
[user]email = foo@bar.zoo
[user]password_confirmation = 123

然后我将 devise_for 放在这样的命名空间中

namespace :api do
  namespace :v1 do
    devise_for :users,
               controllers: {
                   :registrations => 'api/v1/registrations',
                   :sessions => 'api/v1/sessions',
                   :passwords => 'api/v1/passwords'
               }
  end
end

Controller 的文件结构如下所示。

.
├── api
│   └── v1
│       ├── passwords_controller.rb
│       ├── registrations_controller.rb
│       └── sessions_controller.rb
├── application_controller.rb

进行此更改后,我应该使用 [POST] http://domain/api/v1/users 创建一个新用户,但使用以下 form_data

[api_v1_user]password = 123
[api_v1_user]email = foo@bar.zoo
[api_v1_user]password_confirmation = 123

我不希望模型名称(即 user)以 api_v1_ 为前缀。因为如果有一天我将我的 api 版本切换到 v2,那么我必须更新我所有的客户端 API 调用!

有什么想法吗?

最佳答案

您可以在您的 route 尝试以下内容

namespace :api, as: nil do
  namespace :v1, as: nil do |version|
    devise_for :users,
               controllers: {
                   :registrations => "api/#{version}/registrations",
                   :sessions => "api/#{version}/sessions",
                   :passwords => "api/#{version}/passwords"
               }
  end
end

关于ruby-on-rails - Rails : After putting devise routes in namespace, 模型名称以命名空间为前缀。如何删除它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26138266/

相关文章:

ruby-on-rails - Rails - 在 Devise 中禁用 "already_authenticated"重定向

mysql - Rails - 如何从对象中获取随机记录?

ruby-on-rails - Ruby on Rails的CMS

ruby-on-rails - 过滤数据的 ActiveAdmin 收集操作

ruby-on-rails - 如何编译带有 Readline 支持的 Ruby?

ruby-on-rails - Rails 自定义电子邮件验证器 |黑名单

ruby-on-rails - rails : don't generate helpers

mysql - TravisCI 上 ActiveRecord 到 MySQL 数据库的正确连接字符串是什么?

ruby-on-rails - 当前用户只能看到对其帖子的评论

html - Safari 自动填充 : Trigger password suggestions in Devise registration form