Rails嵌套资源,为用户提供漂亮的URL

时间:2013-04-24 13:06:42

标签: ruby-on-rails ruby-on-rails-3

我的应用程序的数据结构如下:

  • 组织有用户
  • 组织有消息
  • 组织有网站

我通常会使用嵌套资源来RESTful地执行此操作:

resources :organizations do
  resources :users
  resources :messages
  resources :sites
end

其中包含以下网址:

/organizations/12/messages
/organizations/12/sites

当管理员需要为组织创建消息时,这些冗长的URL非常适合,因为URL包含组织ID。

但是,我想向普通用户展示漂亮的网址,例如:

/messages
/sites

有没有办法将这些漂亮的URL别名为/organizations/{current_user.organization.id}/*?

1 个答案:

答案 0 :(得分:0)

您需要一种传递组织ID的方法。 例如,如果您的用户属于组织且用户已登录, 您可以通过current_user获取组织ID,如下所示:

class MessageController < ApplicationController
 before_filter :get_organization
 # ...
private
  def get_organization
    @organization = current_user.organization
  end
end

并且,在您的路线中,您可以添加:

resources :messages
resources :organizations do
  resources :messages
end

还有其他解决方案,但这取决于您如何获得组织ID。