1

我有两个具有 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 的一些基础知识——关于如何实现所需功能的任何建议?

4

2 回答 2

3

您已经为:stories. 当您的 StoriesController 收到带有这些参数的请求时:

/stacks/1/stories # nested form

或与这些

/stories # non-nested form

路线将映射到{:controller => :stories, :action => :index }。在嵌套形式中,参数哈希将包括:stack_id => 1. 在非嵌套形式中,它不会。

于 2010-10-30T20:44:43.813 回答
1

如果您正在访问子资源,则默认情况下参数将包括父资源。

例如“/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
于 2010-10-30T20:43:57.670 回答