只有管​​理员用户在Rails with Devise中创建新用户

时间:2016-08-10 01:20:54

标签: ruby-on-rails devise

我使用devise gem创建了一个用户并指定了一个布尔字段来指示用户是否是管理员。但是我没有找到任何如何使管理员用户可以注册其他用户的示例。

我创建了一个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

和我的路线档案:

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

但在我看来,new_user.html.erb会显示以下错误:

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 %>

2 个答案:

答案 0 :(得分:0)

出现此错误的原因是您尝试渲染设计注册,但resource, devise_mapping...尚未初始化new_user.html.erb

application_helper.rb中初始化这些变量,以便您可以在视图中的任何位置访问它。

  def resource_name
    :user
  end

  def resource
    @resource ||= User.new
  end

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

答案 1 :(得分:0)

我认为执行所需操作的最简单,最惯用的方法是覆盖设计 var outerSet = [{date: '2016-12-12:00', value: 50}, {date: '2016-12-13:00', value: 50},{date: '2016-12-14:00', value: 70},{date: '2016-12-15:00', value: 50}]; var hourlyData = ['2016-12-13:01','2016-12-13:02','2016-12-13:03','2016-12-13:04','2016-12-13:05'] var iterator = 0; var tempData = []; for (var i=0; i<outerSet.length; i++) { var innerItem = outerSet[i]; for (var j = 0; j < 4; j++) { if (innerItem.date === '2016-12-13:00') { tempData[iterator] = innerItem; tempData[iterator].date = hourlyData[j]; iterator++; } } } console.log('temp data', tempData); 控制器,并在自定义子类中添加registrations。这样,您可以保留所有设计“魔力”,同时能够自定义谁有权访问。

我会说,如果授权在您的应用程序中起很大作用,您可以考虑添加一个gem来管理用户角色,例如PunditCancancan

相关问题