设计多种布局

时间:2012-01-02 12:25:35

标签: ruby-on-rails devise

我真的想通过2个不同的界面验证我的设计用户,以便有2种不同的布局。

例如,我可以使用/ users / sign_in和/ admin / sign_in基于相同的用户模型。

我设置了两条路线:

devise_for :users

devise_for :users, :module => "admin/users", :path => ''

但我不是正确的方法,因为我需要覆盖我的应用程序控制器上的current_user,如下所示:

def current_user
    super || current_admin_user
end

此外我有2个方法:authenticate_user!和authenticate_admin_user!

我真的对这个规范感到困惑,有人可以帮忙吗?

3 个答案:

答案 0 :(得分:0)

我不确定我是否遇到了您的问题,如果没有,请对其进行评论:)

无需覆盖current_user。您可以创建一个过滤器来过滤这样的管理员:

def require_admin_user
  unless current_user.admin
    flash[:error] = "You need admin privileges to enter this area"
    redirect_to root_path 
  end
end

current_user将返回登录的current_user,无论是管理员还是管理员。如果您希望用户只能作为普通用户以管理员身份登录,我建议采用另一种方法:为管理员创建另一个模型并为require_user创建过滤!对于管理员sign_in

答案 1 :(得分:0)

您最好的选择是使用STA(单表继承)...然后您可以使用2个devise_for声明,每个模型一个。

答案 2 :(得分:0)

I have a different controller admin in that i have added a login action.

 class AdminController < ApplicationController   
    def login
      @user = User.new
    end
  end

In view of login.html.erb

<%= form_for(@user, :as => :user, :url => session_path(:user)) do |f| %>
<% end %>


U can now call admin/login path

 and successfully got sign up, but if you want to redirect to some other page after sign up instead of root url then

In application controller write inside this method of devise

def after_sign_in_path_for(resource)
 end