Rails 3路由:覆盖主题#show with Posts #index

时间:2011-08-10 10:03:43

标签: ruby-on-rails routing

非常简单的问题,但即使在浏览Rails路由指南之后,我似乎无法弄清楚如何做到这一点。

假设主题已嵌套资源帖子。

主题的帖子都列在帖子#index(/topics/:topic_id/messages)中。主题#show没有任何用途。我希望在/topics/:topic_id请求时检索Posts #index,而不必在主题控制器中粘贴重定向。

谢谢!

更新

我能够得到所需的结果:

的routes.rb

match 'forums/:forum_id' => 'topics#index', :as => 'forum_topics', :via => :get
match 'topics/:topic_id' => 'messages#index', :as => 'topic_messages', :via => :get

resources :forums, :shallow => true, :except => :show do
  resources :topics, :shallow => true, :except => :show do
    resources :messages
  end
end

但是,我不确定这是否是最好的方法。

更新2 上面的方法打破了其他CRUD方法(比如#create)。仍然在寻找一种解决方案来保持/消息不在网址中。

1 个答案:

答案 0 :(得分:0)

添加此路线

get "/topics/:topic_id" => redirect("/topics/%{topic_id}/messages")

<强> UPD

没有重定向:

get "/topics/:id" => "topic::Messages#index"

或者,如果您使用shallow

get "/topics/:id" => "messages#index"

resources :forums, :shallow => true, :except => :show do
  resources :topics, :shallow => true, :except => :show do
    resources :messages
  end
end