因此,这是在路由文件:
resources :users do
resources :lamps
end我希望能够以如下方式显示用户的“灯具”:
http://localhost:3000/users/2/lamps并使用以下方法显示所有现有的灯具,无论哪个用户拥有它:
http://localhost:3000/lamps两者非常不同,因为第一个是更多的管理视图,而后者更多的是用户浏览时会看到的内容。
问题是,它们都会转到lamp_controller的索引操作
我如何在操作/视图中不用使用if语句就能以干净的方式处理这个问题?
发布于 2016-05-15 16:12:51
可以使用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
endhttps://stackoverflow.com/questions/37240388
复制相似问题