Создавать и обновлять устройства пользователей в админ-панели - PullRequest
0 голосов
/ 14 мая 2019

У меня есть приложение Rails с аутентификацией пользователя с использованием Devise.Я строю админ-панель с нуля (без 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)

Длятеперь, когда я нажимаю кнопку отправки, происходит ошибка действия (в create и update), говоря, что произошла ошибка.

Каков наилучший способ заставить его работать?

...