我正在开发一个基于rails的REST api.要使用此api,您必须登录.关于这一点,我想在我的用户控制器中创建一个方法me,它将返回登录用户信息的json.

所以我try 了这个:

namespace :api, defaults: { format: 'json' } do
  scope module: :v1, constraints: ApiConstraints.new(version: 1, default: true) do
    resources :tokens, :only => [:create, :destroy]
    resources :users, :only => [:index, :update] do

      # I tried this
      match 'me', :via => :get
      # => api_user_me GET    /api/users/:user_id/me(.:format)       api/v1/users#me {:format=>"json"}

      # Then I tried this
      member do
        get 'me'
      end
      # => me_api_user GET    /api/users/:id/me(.:format)            api/v1/users#me {:format=>"json"}

    end
  end
end

正如你所看到的,我的路由等待id,但我希望得到类似Deviate的东西.基于current_user id的东西.示例如下:

edit_user_password GET    /users/password/edit(.:format)         devise/passwords#edit

在本例中,您可以编辑当前用户密码,而无需将id作为参数传递.

我可以用一个集合而不是一个成员,但这是一个肮脏的旁路...

有人有主意吗?

推荐答案

资源路由就是这样设计的.如果你想要不同的东西,自己设计,就像这样.

match 'users/me' => 'users#me', :via => :get

把它放在你resources :users街区之外

Ruby-on-rails相关问答推荐

Puma 工作人员无法在 Ubuntu 20.04 VM 上的 Rails 5.2 中启动

Ruby on Rails 让外键工作

如何在测试期间为 Rails 应用程序启用 Rails.cache 会话对象

Ruby on Rails 中的多种布局

只允许用户在 Rails 中输入字母和数字

Rails Active Record - 从关系中获取 ids 数组

Rails 模型.有效吗?刷新自定义错误并错误地返回 true

添加自定义字段/列以使用 Rails 4 进行设计

在 Epoch 中将 Ruby 时间戳转换为秒数并返回

如何在 Windows 上为 Ruby 安装 sqlite3?

如何解决弃用警告方法 to_hash 已弃用并将在 Rails 5.1 中删除

Rails:仅在创建时验证,或者当字段不为空时在更新时验证

如何从邮箱中获取域

确认后如何进行设计重定向

加载常量时自动加载常量时检测到循环依赖

为什么 Ruby on Rails 使用 http://0.0.0.0:3000 而不是 http://localhost:3000?

counter_cache 实现的问题

rbenv:没有 gemsets 生存

如何使用 url 连接到 postgresql

您可以在弹性 beantalk 环境中运行 rails 控制台或 rake 命令吗?