将上下文从路由器传递到控制器

时间:2014-04-15 17:12:32

标签: ruby-on-rails rails-routing

我正在编写一些可重用的代码,它允许资源嵌套在其他资源之下。路由可能如下所示:

resources :items do
  resources :shared_users
end

resources :things do
  resources :shared_users
end

路由工作很好,但是当我进入控制器时会出现问题。当我在控制器内部时,我想知道我嵌套在哪个资源中。我不一定只是检查请求路径或参数,因为这段代码是可重用的,我不知道它可能嵌套在哪些资源之下。

我想要的是这样的:

resources :items do
  resources :shared_users, context: 'item'
end

resources :things do
  resources :shared_users, context: 'thing'
end

然后在控制器中:

class SharedUsersController
  def index
    # Access context and react accordingly
  end
end

例如,控制器可能希望根据请求加载ItemThing类(即,对/items/1/shared_users的请求,控制器应该能够使用Item 1}}加载资源的类。)

我如何将此类上下文从路由器交给控制器?

由于

1 个答案:

答案 0 :(得分:1)

您可以像在示例代码中那样完全执行此操作:

resources :items do
  resources :shared_users, context: 'item'
end

根据documentation,Rails无法识别的任何选项都作为请求参数传递。在您的控制器中,您可以执行以下操作:

def index
  context = params[:context] # => 'item'
end