Ruby On Rails 7 - 设计用于注册的自定义控制器

问题描述 投票:0回答:1

我正在尝试将身份验证包含在我的 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。我尝试这样做,但又出现一些错误。我无法理解这个概念,想寻求帮助。

ruby-on-rails ruby devise
1个回答
0
投票

当你声明一个控制器时,你只需要这样做:声明控制器,而不是其中的动作,也不是其命名空间下的控制器。

这条线

devise_for :employees, controllers: { registrations: "employees/new" }

寻找控制器:

app/controllers/employees/new_controller.rb

但你并不是在寻找它,是吗?您需要像这样更改行:

devise_for :employees, controllers: { registrations: "employees" }

现在你正在瞄准

app/controllers/employees_controller.rb

© www.soinside.com 2019 - 2024. All rights reserved.