如何在Rails中为资源显示页面设置特定于资源的根?

时间:2012-01-21 08:13:38

标签: ruby-on-rails devise

My Rails 3.1应用程序有两个用户模型:用户和管理员。我正在使用Devise。

我的routes.rb包含

root :to => "pages#welcome"

用户可以以用户或管理员身份登录。

登录后,根路径应该更改。 Admins的根目录应该是“admins#dashboard”,Users的root应该是当前用户的显示页面。

我无法弄清楚如何最好地实现这一点,我有三个问题。

  1. 如何定义特定于资源的根。我觉得我应该 定义'user_root_path'和“admin_root_path”但是无法计算出来 我的路线文件中的语法?
  2. 如何传入当前用户的ID,以便我可以根据用户的显示页面进行操作?
  3. 如何确保只有用户或管理员会话才能在任何一个用户或管理员会话中处于活动状态 时间,并且用户无法同时登录?
  4. 我会非常感谢指向正确的方向,因为这让我感到难过!

    谢谢。

3 个答案:

答案 0 :(得分:1)

您可以为Admin users =>使用命名空间2个不同的根。 另外,请查看设计配置文件devise.rb,它有一些用于管理范围(用户和管理员)的设置。例如:

 # ==> Scopes configuration
  # Turn scoped views on. Before rendering "sessions/new", it will first check for
  # "users/sessions/new". It's turned off by default because it's slower if you
  # are using only default views.
  # config.scoped_views = false

  # Configure the default scope given to Warden. By default it's the first
  # devise role declared in your routes (usually :user).
  # config.default_scope = :user

  # Configure sign_out behavior.
  # Sign_out action can be scoped (i.e. /users/sign_out affects only :user scope).
  # The default is true, which means any logout action will sign out all active scopes.
  # config.sign_out_all_scopes = true

如果您不熟悉名称空间,可以阅读它们here

答案 1 :(得分:0)

页面#welcome< ---在此控制器和动作中发送params anonymous

你可以在你的application.rb

中试试这个
def after_sign_in_path_for(resource)
  if params[:anonymous].eql?("1") // mean user
    redirect_to user_root_path, :user_id => current_user.id
  else // mean administration
    redirect_to admin_root_path
  end
end

将user_root_path和admin_root_path配置到您在route.rb中所需的目的地

希望它会有所帮助。

答案 2 :(得分:0)

经过一番挖掘,以及米哈伊尔的一些指示,我自己设法回答了这个问题。

在我的routes.rb文件中,我添加了以下内容:

root :to => "pages#welcome"

为未经身份验证的用户定义根目录。

authenticated :admin do
    root :to => "dashboard#show"
end

定义经过身份验证的管理员的根目录,

match '/dashboard' => "dashboard#show", :as => :admin_root

在登录重定向后定义管理员并整理路径。

感谢所有的回复!