简单的铁路路由/网址问题

时间:2010-04-30 23:00:48

标签: ruby-on-rails url routing

我在我的应用程序中使用Ryan Bates'nifty authentication进行用户注册和登录。每个用户has_many :widgets,但我想允许用户浏览其他用户的小部件。我认为像/username/widgets/widget_id这样的网址方案会很有意义 - 它会将所有与小部件相关的代码保存在同一个地方(小部件控制器)。但是,我不确定如何在我的应用程序中使用这种URL。

现在我的代码库允许登录用户只浏览他们自己的小部件,这些小部件位于/widgets/widget_id。我需要对routes.rb,我的模型类以及需要链接到给定窗口小部件的任何地方进行哪些更改?

我之前已经完成了Rails的工作,但是当涉及更复杂的路由等时,我是一个新手,所以我很感激任何反馈。谢谢你的考虑!

2 个答案:

答案 0 :(得分:0)

查看嵌套路由。您可以在用户中嵌套小部件,如下所示:

map.resources :users do |users|
  users.resources :widgets
end

哪个会为您提供以下网址:

/users/1/widgets # all of user 1's widgets
/users/1/widgets/1 # one of user 1's widgets

查看routing guide了解详情。

答案 1 :(得分:0)

最简单的方法是使用InheritedResources插件来处理大部分的法律工作。

# routes:
map.resources :users do |user|
  user.resources :widgets
end


class WidgetsController < InheritedResources::Base
  # this will require :user_id to be passed on all requests
  # @user will be set accordingly
  # and widget will be searched in @user.widgets
  belongs_to :user
end

# no changes required to the models