Rails-3.1嵌套路由创建相同的动作和控制器,基本缺乏知识

时间:2011-12-04 01:40:11

标签: ruby-on-rails-3 controller routes nested action

执行以下路由配置:

resources :cadeiras do
resources :professores 
end

resources :cadeiras do 
resources  :fichas
end

resources :fichas do
resources :exercicios
end

将为我生成2个不同的链接到同一个控制器和动作,运行rake routes ill得到类似的东西:

 fichas GET    /fichas(.:format)  {:action=>"index", :controller=>"fichas"}
 cadeira_fichas GET    /cadeiras/:cadeira_id/fichas(.:format)    {:action=>"index", :controller=>"fichas"}

第一个动作将引用所有'fichas',而第二个动作仅引用'cadeiras'中的'fichas',如何区分这两个动作?

我想避免这里描述的三级嵌套问题:http://weblog.jamisbuck.org/2007/2/5/nesting-resources

感谢您的时间

1 个答案:

答案 0 :(得分:1)

如果我理解你的问题,答案是“你不区分他们”:

从控制器执行完全相同的操作,呈现完全相同的视图。不同之处在于发送到视图的“fichas”集合:    - 在第一种情况下,视图中可以使用所有fichas    - 在第二种情况下,视图中只提供与'cadeira'相关的'fichas'(例如/cadeira/1/fichas将只显示与'{cadeira'相关的'fichas'id 1)

要确定在索引视图中显示哪些记录(例如),您可以执行以下操作:

unless cadeira_id = params[:cadeira_id]
  @fichas = Ficha.all
else
  @fichas = Cadeira.find(cadeira_id).fichas
end

其余部分取决于视图:它应该以相同的方式呈现fichas,您只需选择实际可用的记录。