我有两个具有has_many关系的对象(@stacks和@stories)(通过@anthologies)。故事可以单独查看(/ stories / 1 /)或作为Stack中的集合(/ 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的一些基础知识 - 有关如何实现所需功能的任何建议吗?
答案 0 :(得分:3)
您已为:stories
定义了嵌套和非嵌套路由。当您的StoriesController收到包含以下参数的请求时:
/stacks/1/stories # nested form
或与这些
/stories # non-nested form
路线将映射到{:controller => :stories, :action => :index }
。在嵌套形式中,params哈希将包含:stack_id => 1
。在非嵌套形式中,它不会。
答案 1 :(得分:1)
如果您正在访问子资源,则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