Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 多布局设计_Ruby On Rails_Devise - Fatal编程技术网

Ruby on rails 多布局设计

Ruby on rails 多布局设计,ruby-on-rails,devise,Ruby On Rails,Devise,我真的很喜欢通过2个不同的界面来验证我的Desive用户,以便有2个不同的布局 例如,我可以基于相同的用户模型使用/users/sign_-in和/admin/sign_-in 我设置了两条路线: devise_for :users 及 但我不确定这样做是否正确,因为我需要覆盖我的应用程序控制器上的当前用户,如下所示: def current_user super || current_admin_user end 此外,我有两种方法:验证用户!并验证\u管理员\u用户 我真的对这个

我真的很喜欢通过2个不同的界面来验证我的Desive用户,以便有2个不同的布局

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

我设置了两条路线:

devise_for :users

但我不确定这样做是否正确,因为我需要覆盖我的应用程序控制器上的当前用户,如下所示:

def current_user
    super || current_admin_user
end
此外,我有两种方法:验证用户!并验证\u管理员\u用户


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

我不确定是否有您的问题,如果没有,请评论:)

不需要覆盖当前用户。您可以创建筛选管理员的筛选器,如下所示:

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
将返回当前登录的_用户,无论该用户是管理员还是非管理员。如果你想让一个用户只有作为普通用户才能作为管理员登录,我建议另一种方法:为管理员创建另一个模型,并为require_用户过滤!对于管理员
登录

您最好使用STA(单表继承)…然后您可以为声明使用2个
design\u,每个模型一个。

我有一个不同的控制器管理员,因为我添加了一个登录操作。
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
类AdminController<应用程序控制器 def登录 @user=user.new 终止 终止 查看login.html.erb :user,:url=>会话路径(:user))do | f |%> 你现在可以调用管理员/登录路径 并成功注册,但如果您想在注册后重定向到其他页面,而不是根url,则 在应用控制器写内这种设计方法 在(资源)的路径中签名后定义 终止
您好,谢谢您的回复。这不是我想要的。。。我有一个名为user的模型,它有一个角色(管理员、学生等)。对于学生用户,我需要一个具有指定名称的登录页面(如/user/sign_-in)。对于其他用户,我想要一个具有不同设计和不同设计控制器的其他登录页面(如/admin/sign_-in)。这并不能解决我的问题。我不能为每个角色都提供一个模型。我需要的只是每个角色的不同登录布局。我假设您的模型上有一个
角色
属性…STA将为
角色
属性的不同值提供一个类层次结构,但是,您仍然有一个名为
用户
的表。通过这种方式,你可以“欺骗”你的想法,你有不同的模型,并利用这一点,有不同的登录控制器,等等。
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