Ruby on Rails排除了路由约束中的组元素

时间:2013-04-01 09:10:24

标签: ruby-on-rails regex ruby-on-rails-3 routes constraints

我想知道如何为我的路线定义约束正则表达式,只有当它排除了该组的每个元素时才会匹配。

例如,我想这样做:

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

我知道如果我们希望它匹配列表中的任何元素,我们就会这样定义:

get "list/:action", :constraints => {:action => /(new|edit|delete|update)/},但我不知道,如何让它按上述方式运作。

我尝试在小组前使用^!标志,但到目前为止没有运气 - 我认为必须有另一种符号。

我如何排除这些元素?

1 个答案:

答案 0 :(得分:3)

尝试以下方法。它将排除路线中的行为。

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

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

这将从new的路由中排除editdeleteupdatelist操作