【问题标题】:How do I create a restful api on top of a resource that has different methods to return different results?如何在具有不同方法返回不同结果的资源之上创建一个 restful api?
【发布时间】:2015-02-05 22:47:35
【问题描述】:

我有这个资源

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 标准规定您必须以这种方式返回资源

/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

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

【问题讨论】:

    标签: ruby-on-rails ruby rest routes


    【解决方案1】:

    如果您在 roles_controller.rb(system_roles 和 project_roles)中创建相应的方法,您可能会得到这样的结果:

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

    system_roles 控制器方法将返回 Role.system_roles,project_roles 将分别返回 Role.project_roles。

    【讨论】:

    • 我在 rails3 中执行此操作。我得到这个错误。 undefined local variable or method on' 用于#<:routing::mapper:0x007fbf2deb8838>`。我认为您的建议在 rails4 中。不幸的是,无法移动到 rails4。我错过了什么
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多