将新视图映射到现有资源...如何创建/ resource / number / foobar?

时间:2010-12-15 03:11:59

标签: ruby-on-rails ruby model-view-controller routes

我已经构建了一个Ruby on Rails(2.3.8)应用程序,允许用户跟踪他们的锻炼。此外,如果用户是健身房所有者,他们可以在我的应用程序中创建一个健身房(在我的情况下称为Box)。一个框将网站范围的活动过滤到该框的成员(通过成员资格关联完成,但这对此并不重要)。

Box住在Boxes资源中,可以在我的应用程序/ box / 14中访问,如您所料。我现在想要为理想情况下住在leaderboard的每个框创建一个/boxes/14/leaderboard,并且只显示框14中的活动(当然14是一个示例数字)。排行榜不需要是完整的资源,因为我只是通过named_scopes过滤活动。

出于某种原因,我之前没有遇到过这样的情况。在框架内实现这一目标的最佳方法是什么?我已经尝试在boxes_controller中创建一个方法并将路由映射到/boxes/leaderboard,但当然这样可以找到一个id = leaderboard的Box。

有什么想法吗?或者我错过了一些基本的东西。

1 个答案:

答案 0 :(得分:1)

我认为最简单的方法是为此方案添加成员路由。在您的routes.rb中添加类似的内容:

map.resources :boxes, :member => { :leaderboard => :get }

这将导致另外一条路线如下:

leaderboard_box GET   /boxes/:id/leaderboard    {:controller=>"boxes", :action=>"leaderboard"}

这将被路由到BoxesController中名为排行榜的动作。