2015-02-05 51 views
0

我有這個資源如何在具有不同方法返回不同結果的資源之上創建一個restful api?

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 

什麼應該在路由文件中?

回答

1

如果您在您的roles_controller.rbsystem_rolesproject_roles)相應的方法,你可以有這樣的事情:

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

system_roles控制方法將返回Role.system_rolesproject_roles將分別返回Role.project_roles

+0

我在rails3中這樣做。我得到這個錯誤。 '未定義的局部變量或方法'on'爲。我認爲你的建議是在rails4中。不幸的是,不能移動到rails4。我錯過了什麼 – codemonk 2015-02-06 22:09:48

相關問題