2013-04-01 38 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