从URL获取父资源

我有两个具有has_many关系的对象(@stacks和@stories)(通过@anthologies)。 故事可以单独查看(/ stories / 1 /)或作为堆栈中的集合(/ stacks / 1 / stories / 1 /)查看。

map.resources :stories map.resources :anthologies map.resources :stacks, :has_many => :stories do |stack| stack.resources :stories end 

我已经有了这个基本框架,我正在尝试识别故事作为堆栈的一部分呈现的时间,以便我可以在故事之间构建一些导航。 我认为最简单的方法是检查主控制器的URL,但1)我不知道如何做到这一点,2)它似乎非常不Railsy,就像应该有一个更直接的方式。

仍然关注Rails的一些基础知识 – 关于如何实现所需function的任何建议?

您已为:stories定义了嵌套和非嵌套路由。 当您的StoriesController收到带有以下参数的请求时:

 /stacks/1/stories # nested form 

或与这些

 /stories # non-nested form 

该路线将映射到{:controller => :stories, :action => :index } 。 在嵌套forms中,params散列将包括:stack_id => 1 。 在非嵌套forms中,它不会。

如果您正在访问子资源,则params默认包含父资源。

例如“/ stacks / 1 / stories / 2 /”将具有这样的参数结构:

 {:action => 'show', :controller => 'stories', :stack_id => 1, :id => 2 } 

如果要在控制器中找到嵌套资源,只需在params哈希中查找parent_id的存在,例如:

 before_filter :find_stack protected def find_stack if params[:stack_id] Stack.find(params[:stack_id]) end end