2013-04-01 42 views
1

我想知道,如何为我的路由定义约束正规表达式,只有当它排除组中的每个元素时才会匹配。Ruby on Rails在路由约束中排除组元素

举例来说,我想这样做:

get "list/:action", :constraints => {:action => [NONE OF THE FOLLOWING: (new, edit, delete, update)} 

我知道,如果我们希望它匹配任何名单的元素,我们就已经定义了这样:

get "list/:action", :constraints => {:action => /(new|edit|delete|update)/},但我不知道,如何使它如上所述工作。

我已经尝试过在组之前使用^!的标志,但目前为止还没有运气 - 我认为必须有另一种标志。

我将如何排除这些元素?

回答

3

请尝试以下操作。它会排除路线中的动作。

class ExcludeActions 
    def matches? 
    ["new", "edit", "delete", "update"].exclude? params[:action] 
    end 
end 

get "list/:id", :constraints => ExcludeActions.new 

这将排除路由neweditdeleteupdate行动为list

+0

不,我不能使用资源指令。我只需要使用约束。 – Dmitri

+0

@Dmitri,我已经相应地更新了我的答案。 – KULKING

+0

该类应该写入名为'exclude_actions.rb'的单独模型 – KULKING