【问题标题】:Adding another route to API namespace in Rails在 Rails 中向 API 命名空间添加另一个路由
【发布时间】:2019-07-05 04:27:03
【问题描述】:

例如,我在“/api”下有一些路由:

/api/users
/api/users/new
/api/users/:id/edit

UsersController 中的所有方法都以 JSON 格式响应,它的行为类似于 API 系统。

我想在 /api 命名空间下添加另一个路由 - 比如 /api/auth/index

我添加了新的resources,但它不起作用

这是我的路线.rb:

Rails.application.routes.draw do
  devise_for :users
  root to: "pages#root"

  namespace :api do
    resources :user, only: %i[index show create destroy update search]
    post '/user/import', to: 'user#import_line'    
    resources :auths, only: %i[index]
  end

  get '*path', to: 'pages#root'
end

如何在api 命名空间下添加新路由?

【问题讨论】:

  • 你添加的路由应该响应这个url/api/auths。你遇到了什么错误?
  • 是的,你是对的。现已修复
  • 你说的不工作是什么意思?您能否发布rake routes 的输出并告诉我们您期望的不同之处?

标签: ruby-on-rails routes


【解决方案1】:

您应该使用resources :users 而不是:user。宁静的路线应该大多是复数*。如果不止一个,则应始终使用复数形式。

namespace :api do
  resources :users, only: %i[index show create destroy update]
end

这可能看起来无关紧要,但由于对rails 的配置性质的约定,它会导致您非常痛苦,因为它无法与多态路由助手一起正常工作。控制器的名称也应该是复数形式 (Api::UsersController)。

add additional restful actions 传递一个块给resources

namespace :api do
  resources :users, only: %i[index show create destroy update] do
    get :search
    post :import, on: :collection, action: :import_line
  end
end

如何在 api 命名空间下添加新路由?

将它们放在您传递给namespace的块中:

namespace :api do
  resources :users, only: %i[index show create destroy update] do
    get :search
    post :import, on: :collection
  end
  resources :auths, only: [:index]
end

但是,这将创建 GET /auths 而不是 GET /auths/index。我建议你阅读rails guides on how the rails conventions handle restful routing

【讨论】:

【解决方案2】:

删除你的 %i 并像下面这样写,它对我有用。

namespace :api do
  resources :auths, only: [:index]
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    • 2016-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多