所以这是在路线文件中:
resources :users do
resources :lamps
end
我希望能够显示用户的灯"有类似的东西:
http://localhost:3000/users/2/lamps
并使用以下任何用户拥有的所有现有灯具显示:
http://localhost:3000/lamps
两者都非常不同,因为第一个更像是管理视图,而后者更多是用户浏览所看到的。
问题是他们都去了lamp_controller的索引动作
如何在不需要在我的操作/视图中使用if语句的情况下以干净的方式管理它?
答案 0 :(得分: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