2015-10-06 103 views
2

我想在開發我的Rails應用程序時達到這樣的效果:/users/14/images/88。 在那裏我有用戶的網址段,然後是用戶ID,屬於這個用戶的圖像和圖像ID。設計Ruby on Rails 4路線

我在問你,所以,設計我的路線的最佳方法是什麼?我應該保持這種模式嗎? 我讀過這對Ruby on Rails的路由文件:

[ ! ] Resources should never be nested more than 1 level deep. 

而這正是讓我困惑。沒有更深的1級。

所以,基本上,這可能意味着一個級別可能是/users/14,但我需要一個級別(+ /images/88)。根據設計路線的最佳實踐,製作多於一個級別的嵌套資源是一個壞主意。 我對此感到困惑。

提前致謝!

+0

這是沒有地方分享專家**的意見**,對不起。儘管如此,爲了澄清,這是關於一個**嵌套**級別:我。即'/ users/14/images/11'是可以接受的,'/ users/14/images/11/comments/5'不是。這只是代碼風格的限制,請參閱[Rails社區風格指南](https://github.com/bbatsov/rails-style-guide#routing)。 –

+0

謝謝,實際上,我已經決定在指向用戶圖像時使用'/ users/11/images',如果我想要鏈接到圖像,它將是'/ images/231',所以我已經將我的圖像與用戶的url-segment中的id分開。 –

回答

4
#config/routes.rb 
resources :users do 
    resources :images 
end 

這是一個深度。


#config/routes.rb 
resources :users do 
    resources :images do 
     resources :comments 
    end 
end 

這是不止一個級別深度。


正如你可以通過quoted resource看到,這個問題是不是不能匹配的資源,但在處理流程。例如...

#app/controllers/comments_controller.rb 
class CommentsController < ApplicationController 
    def show 
     @user = User.find params[:user_id] 
     @image = @user.images.find params[:image_id] 
     @comments = @image.comments 
    end 
end 

雖然沒有完全超出範圍,但它顯示了深層鏈接資源的混亂程度。您最好提倡更簡化的方法 - 例如,通過images#show控制器操作將comments添加到images &顯示它們。