2016-02-24 77 views
0

我想使设计管理员不能注册,但是当我从远离admin.rb时,edit_admin_registration_path不起作用。在这种情况下,管理员如何更改他的电子邮件/密码?更改设计管理员的密码没有:可注册

class Admin < ActiveRecord::Base 
    devise :database_authenticatable, 
     :recoverable, :timeoutable, :registerable 

错误:

undefined local variable or method `edit_admin_registration_path' for #<#<Class:0x8cf7b40>:0x8cf5278> 

注:我有2种不同的设计模式

回答

1

Admin模型中移除:registerable将删除所有路线佣工的Devise::RegistrationsController,如:edit_admin_registrations_path

你需要保持:registerableAdmin模型和覆盖Devise::RegistrationsController限制对newcreate操作的访问。

创建一个新的registrations_controller.rb包含:

class RegistrationsController < Devise::RegistrationsController 
    def new 
    redirect_to root_path 
    end 

    def create 
    redirect_to root_path 
    end 
end 

而在你routes.rb告诉设计使用您的注册控制器。

devise_for :admins, controllers: { registrations: 'registrations' }

这样,您将限制从创建帐户的用户,但允许现有的编辑他们的信息。

+0

谢谢,但如果我有多个设计模型(管理员,用户,客人),他们都会使用相同的'registrations_controller.rb'? –

+0

我照你说的做了,创建了'class RegistrationsControler

+0

假设你有这样的定义: 'devise_for:admins' 'devise_for:users' 'devise_for:guests' 发生变化: 'devise_for:管理员,控制器:{注册: '注册'}'会只影响管理员。 关于你得到的错误。这是控制器名称中的拼写错误,我在原始答案中进行了编辑。 在附注中,您应该考虑使用类似Rolify和Pundit的内容来进行基于角色的访问,而不是通过模型复制功能,但这不在此问题的范围之内。 –

相关问题