我使用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 %>
答案 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来管理用户角色,例如Pundit或Cancancan