首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rails中子资源的路由选择

rails中子资源的路由选择
EN

Stack Overflow用户
提问于 2016-05-15 15:51:33
回答 1查看 30关注 0票数 2

因此,这是在路由文件:

代码语言:javascript
复制
  resources :users do
    resources :lamps
  end

我希望能够以如下方式显示用户的“灯具”:

代码语言:javascript
复制
http://localhost:3000/users/2/lamps

并使用以下方法显示所有现有的灯具,无论哪个用户拥有它:

代码语言:javascript
复制
http://localhost:3000/lamps

两者非常不同,因为第一个是更多的管理视图,而后者更多的是用户浏览时会看到的内容。

问题是,它们都会转到lamp_controller的索引操作

我如何在操作/视图中不用使用if语句就能以干净的方式处理这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-15 16:12:51

可以使用module选项将嵌套路由到命名空间控制器:

代码语言:javascript
复制
Rails.application.routes.draw do
  resources :users do
     resources :lamps, only: [:index], module: 'users' 
  end
  resources :lamps, only: [:index]
end

另一种对一组资源这样做的方法是:

代码语言:javascript
复制
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

这将使您能够在单独的控制器中处理不同的上下文:

代码语言:javascript
复制
# 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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37240388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档