我正在尝试将身份验证包含在我的 Ruby on Rails 应用程序中。我正在使用 Devise gem 来实现同样的目的。以下是场景。
我有一个在安装 Devise 时创建的用户模型。
我还创建了一个名为“Employees”的新控制器。
员工控制器包含“新建和创建”操作。
目标:我想使用员工控制器来创建新用户,而不是设计注册控制器。
以下是我所做的:
**员工控制器**
class EmployeesController < ApplicationController
# GET /employees or /employees.json
def index
@employees = User.search_employee(params[:employeesearchfield])
end
# GET /employees/1 or /employees/1.json
def show
User.archive_employee(params[:id])
@employee = User.find(params[:id])
end
# GET /employees/new
** def new
@employee = User.new
end
**
def import
User.import(params[:file])
redirect_to employees_url, notice: "Data imported."
end
def export
@employees = User.all
respond_to do |format|
format.csv { send_data @employees.to_csv, filename: "employees-#{DateTime.now.strftime("%d%B%Y")}.csv"}
end
end
def delete_multiple
@employees = User.find(params[:employee_ids])
#Array objects can be deleted one by one only.
@employees.each(&:destroy)
redirect_to employees_url, notice: "Employee was successfully destroyed."
end
** def create
@employee = User.new(employee_params)
if @employee.save
redirect_to root_path, notice: "Please check your email for confirmation instructions."
else
render :new, status: :unprocessable_entity
end
end**
private
def employee_params
params.require(:user).permit(:name, :department, :employedon, :manager, :appraisalrating, :ctc, :empcategory, :empnumber, :post, :DOB, :personalemail, :contact, :officelocation, :workstyle, :gender, :companyname, :workshift, :address, :socialstatus, :employeepermanentillness, :phstatus, :bpay, :lastrevision, :appraisalcomments, :sup1, :sup2, :sup3, :sup4, :skillcategory, :estatus, :role)
end
end
在 Routes.rb 文件中,我已覆盖注册控制器的 Devise 路由,如下所示:
路线文件
devise_for :employees, controllers: { registrations: "employees/new" }
**新用户表格**
<div class = "container">
<%= form_with model: @employee, url: new_employee_path, method: :post do |f| %>
<div class = "container">
<div class = "row">
<p class="display-6">ACCOUNT INFORMATION</p>
<div class="form-group col-6">
<b>USERNAME:</b>
<%= f.email_field :email, placeholder: "Enter username", class: 'form-content form-content w-100 p-1' %>
</div>
<div class="form-group col-6">
<b>DEFAULT PASSWORD</b>
<%= f.password_field :password, placeholder: "Enter password (Minimum length: 6 characters)", class: 'form-content form-content w-100 p-1' %>
</div>
</div>
问题:当我提交表单时,出现路由错误。 “ActionController::RoutingError(没有路由匹配 [POST]“/employees/new”):”
预期结果:要创建新用户。
尝试:我很困惑 Employee Controller 是否应该继承自 Devise::RegistrationsController。我尝试这样做,但又出现一些错误。我无法理解这个概念,想寻求帮助。
当你声明一个控制器时,你只需要这样做:声明控制器,而不是其中的动作,也不是其命名空间下的控制器。
这条线
devise_for :employees, controllers: { registrations: "employees/new" }
寻找控制器:
app/controllers/employees/new_controller.rb
但你并不是在寻找它,是吗?您需要像这样更改行:
devise_for :employees, controllers: { registrations: "employees" }
现在你正在瞄准
app/controllers/employees_controller.rb