2013-05-12 39 views
0

考慮從router.rbRails的路由器:避免長期助手

resource :user do 
    namespace :settings do 
     resource :access_filter 
    end 
    get 'settings' 
end 

下面的代碼片段此生成的URL我想(user/settings/access_filter),但它會產生不希望的目錄結構和一些長的URL幫手。

在這種情況下,幫手變成new_user_settings_access_filter,我寧願只有new_access_filter。 Rails期望AccessFiltersController駐留在名爲Settings的模塊中。

我想要一種方法來保持一個平坦的目錄結構,一個平坦的url幫助器結構,但是一個「嵌套的」URL結構。只要沒有參數需要,我不認爲我的控制器和視圖需要知道訪問篩選器嵌套在用戶模型下,我想保留將它們移動到options/access_filter而不會破壞網站的機會。

有關如何到達那裏的建議,將不勝感激。

+0

其中一個最重要的軌道原則是慣例而不是配置。我認爲你應該添加一些額外的文件夾,模塊等,如果你的Rails應用程序增長了,你的代碼也會增長,也許有時候你會對rails慣例感到高興:)。但這只是一個小提示。 – Mattherick 2013-05-13 05:40:33

回答

3

如果您只想爲路徑加上前綴,則可以避免使用單獨的scope所涉及的嵌套和任何麻煩。從組織角度來看,這似乎也很有意義,因爲您實際上想要將訪問過濾器路由與用戶分離。

scope "user/settings" do 
    resource :access_filter 
end 

# then if you wanted to change it later, it's simply 
scope "options" do 
    resource :access_filter 
end 

scope是實際使用的namespace較低水平的功能。它非常靈活,並且可以在不更改控制器查找和路由名稱等情況下修飾路徑。

+0

這正是我所需要的。謝謝=) – 2013-05-15 00:08:14