Getting the parent resource from the URL

北慕城南 提交于 2019-12-11 06:37:07

问题


I've got two objects (@stacks and @stories) with has_many relationships (through @anthologies). Stories can be viewed individually (/stories/1/) or as a collection in a Stack (/stacks/1/stories/1/).

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

I've got this basic frame working I'm trying to identify the when a story is being rendered as part of a stack so that I can build some navigation between stories. I figure the easiest way to do this is to check the URL for the primary controller, but 1) I don't know how to do this, and 2) it seems very un-Railsy, like there should be a more direct way.

Still getting my head around some of the basics of Rails here -- any recommendations on how to achieve the desired functionality?


回答1:


You've defined both nested and non-nested routes for :stories. When your StoriesController receives a request with these parameters:

/stacks/1/stories # nested form

or with these

/stories # non-nested form

The route will map to {:controller => :stories, :action => :index }. In the nested form, the params hash will include :stack_id => 1. In the non-nested form, it won't.




回答2:


if you are accessing the child resource then the params will include the parent resource by default.

For example "/stacks/1/stories/2/" will have a params structure like this:

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

If you want to find the nested resource in the controller just look for the presence of the parent_id in the params hash e.g.:

before_filter :find_stack

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


来源:https://stackoverflow.com/questions/4060343/getting-the-parent-resource-from-the-url

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!