在管理面板中创建和更新devise用户

时间:2019-05-14 14:26:32

标签: ruby-on-rails authentication devise ruby-on-rails-5

我有一个使用Devise进行用户身份验证的Rails应用。我正在从头开始构建管理面板(没有RailsAdmin或ActiveAdmin)。我可以在管理面板中显示和显示用户详细信息。但是我不能创建一个新的或编辑用户。我在一个单独的控制器(专用于管理面板)中编写了自己的逻辑。正如我所说的,这些动作可以完美地显示和销毁它们,而不能完美地创建和更新它们。

我想这是因为用户是用Devise创建的。我正在寻找一种替代Devise控制器以在管理面板中执行操作的方法。

routes.rb

Rails.application.routes.draw do
  devise_for :users
  resources :users

  namespace :admin do
    get '', to: 'dashboard#index', as: '/'
    resources :users
    resources :products
  end

  ...

end

app/controllers/admin/users_controller.rb

class Admin::UsersController < ApplicationController
  def index
    @users = User.all.order('CREATED_AT DESC')
  end

  def show
    @user = User.find(params[:id])
  end

  def new
    @user = User.new
  end

  def create
    @user = User.new(user_params)

    if @user.save
        redirect_to admin_path
        flash[:notice] = "Le client a bien été créé"
    else
        redirect_to new_admin_user_url
        flash[:alert] = "Une erreur est survenue lors de la création du client. Veuillez réessayer"
    end
  end

  def edit
    @user = User.find(params[:id])
  end

  def update
    @user = User.find(params[:id])
    @user.update_attributes(user_params)

    if @user.save 
        redirect_to admin_path
        flash[:notice] = "L'utilisateur #{@user.firstname} #{@user.lastname} a bien été modifié"
    else
        redirect_to edit_admin_user_path(@user)
        flash[:alert] = "Une erreur est survenue lors de la modification de l'utilisateur. Veuillez réessayer"
    end 
  end

  def destroy
    @user = User.find(params[:id])

    if @user.destroy 
        redirect_to admin_path
        flash[:notice] = "L'utilistateur a bien été supprimé"
    else
        redirect_to admin_path
        flash[:alert] = "Une erreur est survenue lors de la suppression de l'utilisateur. Veuillez réessayer"
    end
  end

  private

  def user_params
    params.require(:user).permit(:firstname, :lastname, :birth_date, :phone_number, :email, :role)
  end
end

user.rb

class User < ApplicationRecord
    has_one :dashboard

    enum role: [:user, :admin]
    after_initialize :set_default_role, :if => :new_record?

    def set_default_role
        self.role ||= :user
    end

    # Include default devise modules. Others available are:
    # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
    devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable

    validates_presence_of :firstname, :lastname, :birth_date, :email, :password, :password_confirmation
end

编辑视图,例如: app/views/admin/users/edit.html.erb

<%= form_for @user, url: {action: "update"} do |f| %>
            <%= f.text_field :firstname %>
            <%= f.text_field :lastname %>
            <%= f.date_field :birth_date %>
            <%= f.text_field :email %>
            <%= f.text_field :phone_number %>
            <%= f.select(:role, User.roles.keys.map {|role| [role.titleize,role]}) %>
            <%= f.submit 'Modifier le client', class: 'pdt-submit' %>
        <% end %>

这是Rails服务器中正在发生的事情:

Started PATCH "/admin/users/2" for ::1 at 2019-05-15 10:24:38 +0200
Processing by Admin::UsersController#update as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"EeMpTRnwc/dHMI2sk/sJj4+F472yQ9G0IjpJB+o4gX3NDuBenXTsr+mJL/vJ+f09NnW0pASBIorcNTKgq7qEKw==", "user"=>{"firstname"=>"Justine", "lastname"=>"Dps", "birth_date"=>"1994-03-26", "email"=>"justine.dps26@gmail.com", "phone_number"=>"0768117148", "role"=>"admin"}, "commit"=>"Modifier le client", "id"=>"2"}
  User Load (1.1ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2  [["id", 2], ["LIMIT", 1]]
  ↳ app/controllers/admin/users_controller.rb:38
   (0.5ms)  BEGIN
  ↳ app/controllers/admin/users_controller.rb:39
   (41.3ms)  ROLLBACK
  ↳ app/controllers/admin/users_controller.rb:39
   (0.2ms)  BEGIN
  ↳ app/controllers/admin/users_controller.rb:41
   (0.5ms)  ROLLBACK
  ↳ app/controllers/admin/users_controller.rb:41
Redirected to http://localhost:8000/admin/users/2/edit
Completed 302 Found in 54ms (ActiveRecord: 43.5ms)

现在,当我单击“提交”按钮时,它会击中错误动作(在createupdate中),表示发生了错误。

使它工作的最佳方法是什么?

0 个答案:

没有答案