2014-10-28 43 views
3

A小调问题:默认:排除Rails的资源路由选项

我使用我的REST API的Rails,但因为它是一个RESTful API我并不真的需要:new:edit路线我的任何资源因为人们只会通过自动JSON请求完全与此API进行交互,而不是以图形方式。例如,不需要专门的编辑页面。

目前,我需要为定义的每个资源做这样的事情:

# routes.rb 
resources :people, except: [:new, :edit] 

这不是什么大不了的有在/config/routes.rb的每一个资源:except选项,但有一种方式来定义默认值,所以我不必在每个资源上指定它?我想干掉这段代码,而不是像在任何地方使用默认选项一样传递一个局部变量。

更一般地说,你可以设置Rails路由的默认选项,以便从:exclude开始按照预设选项进行操作吗?

谢谢!

回答

7

with_options救援!

with_options(except: [:new, :edit]) do |opt| 
    opt.resource :session 
    opt.resource :another_resource 
    opt.resources :people 
end 
+0

漂亮!谢谢! – 2014-10-29 20:16:41

1

您可以定义一个自定义方法来在ActionDispatch::Routing::Mapper命名空间下绘制路线。在你routes.rb文件,在文件的顶部Rails.application.routes.draw do前:

class ActionDispatch::Routing::Mapper 

    def draw(resource) 
    resources resource, except: [:new, :edit] 
    end 

end 

#routes start here 
Rails.application.routes.draw do 

    draw :people 
    draw :products 
    # ...rest of the routes 

end 

现在对于那些特殊的资源可以调用如上draw方法。

0

我会执行CanCan宝石。

可以简化为一个单一的文件

class Ability 
    include CanCan::Ability 

    def initialize(user) 
    user ||= User.new # guest user (not logged in) 
    if user.admin? 
     can :manage, :all 
    else 
     can :read, :all 
    end 
    end 
end 

然后在你的控制器,你可以有单行执行资源

class CustomersController < ApplicationController 
    load_and_authorize_resource 
    ... 
end 

定义能力 https://github.com/ryanb/cancan/wiki/Defining-Abilities

对资源的访问授权于控制器级别 https://github.com/ryanb/cancan/wiki/authorizing-controller-actions