我如何在具有不同方法的资源之上创建 restful api 来获得 return 不同的结果?

How do I create a restful api on top of a resource that has different methods to return different results?

我有这个资源

class Role < ActiveRecord::Base
   # lists all the system-level roles
  def Role.system_roles
    Role.find_all_by_system(true, :order => 'name')
  end

  # lists all the project-level roles
  def Role.project_roles
    Role.find_all_by_system(false, :order => 'name')
  end

  # lists all roles that can be used for workflow enforcement
  def Role.filter_roles
    not_for_filters = ['admin', 'manager']
    Role.project_roles.reject{|role| not_for_filters.include? role.name}
  end
end

现在 REST API 标准规定您必须 return 以这种方式获取资源

/roles

就是这样。

嗯,在控制器的索引方法中,我只做了这个

module Api::V1::Setup
  class RolesController < ApplicationController
    include ApiHelper

    layout nil

    def index
      system_roles_data = Role.system_roles
      render :json => roles_data, :status => :ok
    end
  end
end

我看到其他帖子建议,嗯,传入一个参数。我不想那样做。可以支持以下吗?

/roles/system_roles
/roles/project_roles

路由文件中应该包含什么?

如果您在 roles_controller.rbsystem_rolesproject_roles)中创建相应的方法,您可能会有这样的东西:

resources :roles do
  collection do
    get 'system_roles'
    get 'project_roles'
  end
end

system_roles 控制器方法将 return Role.system_rolesproject_roles 将分别 return Role.project_roles