Rails API获取参数

时间:2018-06-14 22:05:25

标签: ruby-on-rails api postman

创建接收参数的服务的正确方法是什么?

目前我在使用ruby on rails上的API:

module Api
module V1
    class UsersController < ActionController::API
        def  index
            users = User.order('created_at');
            render json: {status: 'Success', message: 'Loaded users', users: users},statu: :ok
        end
        def show
            user = User.find(params[:id])
            render json: user, statu: :ok
        end
    end

end
end

当我尝试使用此url(localhost:3000 / api / v1 / users / 1)使用这个url(localhost:3000 / api / v1 / users / 1)来获取用户时,我只获得了一条预期的记录,但是当我使用postman设置参数时(创建这个url localhost:3000 / api / v1 / users?id = 1)我收回所有记录。

我有这些路线:

Rails.application.routes.draw do
  namespace 'api' do
    namespace 'v1' do   
        resources :users
        resources :messages
        resources :conversations
    end

  end
end

我是否必须为此案例创建其他路线?

1 个答案:

答案 0 :(得分:2)

/api/v1/users/1

相同
/api/v1/users?id=1

rake routes可以看出:

    api_v1_users GET    /api/v1/users(.:format)                 api/v1/users#index
                 POST   /api/v1/users(.:format)                 api/v1/users#create
 new_api_v1_user GET    /api/v1/users/new(.:format)             api/v1/users#new
edit_api_v1_user GET    /api/v1/users/:id/edit(.:format)        api/v1/users#edit
     api_v1_user GET    /api/v1/users/:id(.:format)             api/v1/users#show
                 PATCH  /api/v1/users/:id(.:format)             api/v1/users#update
                 PUT    /api/v1/users/:id(.:format)             api/v1/users#update
                 DELETE /api/v1/users/:id(.:format)             api/v1/users#destroy

api/v1/users/1将转到api/v1/users#showapi/v1/users?id=1将使用参数api/v1/users#index路由到{'id'=>'1'}

因此,路由完全按照预期发生。

我不确定你会创造什么'其他路线'。但你可以做:

module Api
  module V1
    class UsersController < ActionController::API

      def index
        if params[:id]
          user = User.find(params[:id])
          render json: user, status: :ok
        else
          users = User.order('created_at');
          render json: {status: 'Success', message: 'Loaded users', users: users}, status: :ok
        end
      end

      def show
        user = User.find(params[:id])
        render json: user, status: :ok
      end

    end

  end
end

但是,这真的很丑陋而且非常可怕。

最好在iOS(swift)中正确格式化您的网址。