2016-08-10 1 views
0

Ich erstellte einen Benutzer mit Device Gem und zuweisen ein boolesches Feld, um anzuzeigen, ob der Benutzer ein Administrator ist. Ich habe keine Beispiele gefunden, wie nur der Administrator Benutzer kann einen anderen Benutzer registrierenNur Administrator-Benutzer erstellen neue Benutzer in Rails mit Devise

habe ich einen Usercontroller:

class UserController < ApplicationController 
    before_action :is_admin?, only: [:new, :create, :destroy] 

    def new_user 

    end 

    def create 

    end 


    protected 

    def is_admin? 
    if !user_signed_in? 
     redirect_to user_session_path 
    elsif !((current_user.is? :admin) & (user_signed_in?)) 
     redirect_to root_path 
    end 
    end 

end 

und meine Routen-Datei:

devise_for :users, controllers: { 
     sessions: "user/sessions", 
     confirmations: 'user/confirmations', 
     passwords: 'user/passwords' } 

    get 'users/new_user' => 'user#new_user', as: :new_user 
    post 'users/create_user' => 'user#create', as: :create_user 

aber meiner Ansicht new_user.html.erb zeigt diesen Fehler:

undefined local variable or method `resource' for #<#<Class:0x007efbcc054a78>:0x007efbe003f880> 

<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %> 
    <%= devise_error_messages! %> 

<% end %> 

Antwort

0

Der Grund Für diesen Fehler versuchen Sie, die Geräte-Registrierung zu rendern, aber resource, devise_mapping... wurde in 012 nicht initialisiert

Diese Variablen wurden in application_helper.rb initialisiert, damit sie überall in Ihrer Ansicht zugänglich sind.

def resource_name 
    :user 
    end 

    def resource 
    @resource ||= User.new 
    end 

    def devise_mapping 
    @devise_mapping ||= Devise.mappings[:user] 
    end 
0

Ich denke, die einfachste und idiomatische Weg zu tun, was Sie wollen, ist die devise registrations Controller außer Kraft zu setzen, und Ihre before_action in Ihrer benutzerdefinierten Unterklasse hinzufügen. Auf diese Weise behältst du die gesamte "Magie" des Designs und kannst anpassen, wer Zugang hat.

Ich werde sagen, dass, wenn die Genehmigung, einen großen Teil in der Anwendung spielt, man bedenkt, könnte ein Juwel Hinzufügen Benutzerrolle wie Pundit oder Cancancan

zu verwalten
Verwandte Themen