2016-05-15 73 views
1

子ressources所以這是路線文件:路由在軌

resources :users do 
    resources :lamps 
    end 

我希望能夠與像顯示用戶的「燈」:

http://localhost:3000/users/2/lamps 

,並顯示所有現有燈取其用戶擁有它使用:

http://localhost:3000/lamps 

兩者有很大的不同作爲第一個是多個管理視圖和後我的更多的用戶瀏覽會看到什麼。

的東西是不必使用他們都成爲lamp_controller

我怎麼能在一個乾淨的方式管理這個指數的行動,如果在我的動作/ view語句?

回答

2

可以使用module選項航線嵌套路線的命名空間控制器:

Rails.application.routes.draw do 
    resources :users do 
    resources :lamps, only: [:index], module: 'users' 
    end 
    resources :lamps, only: [:index] 
end 

另一種方式爲一組資源,做到這一點是:

Rails.application.routes.draw do 
    resources :users do 
    scope module: 'users' do 
     resources :lamps, only: [:index] 
     resources :chairs 
     resources :rugs 
    end 
    end 
    resources :lamps, only: [:index] 
end 

這將讓你處理單獨控制器中的不同上下文:

# app/controllers/lamps_controller.rb 
class LampsController < ApplicationController 
    # GET /lamps 
    def index 
    @lamps = Lamp.all 
    end 
end 

# app/controllers/users/lamps_controller.rb 
class Users::LampsController < ApplicationController 
    before_action :set_user 

    # GET /users/:user_id/lamps 
    def index 
    @lamps = @user.lamps 
    # renders /views/users/lamps/index.html.erb 
    end 

    private 
    def set_user 
     @user = User.find(params[:user_id]) 
    end 
end 
+0

謝謝。第二個選項完美地工作。 Ruby總是有優雅的解決方案! – AntoineLev