ArgumentError в UsersController # создать при попытке зарегистрироваться с помощью devise on Rails - PullRequest
0 голосов
/ 27 апреля 2019

Я новичок в Rails и застрял, пытаясь настроить регистрацию в моем приложении rails, используя devise gem. Когда я создаю пользователя, появляется следующая ошибка:

ArgumentError в UsersController # create слишком мало аргументов

enter image description here

но пользователь все еще успешно создан и добавлен в БД.

Это мой файл route.rb:

  resources :users
  devise_for :users
  root to: 'static_pages#home'
  get '/signup', to: 'users#new' 

Функция создания в users_controller.rb:

    @user = User.new(user_params)
      if @user.save
        format.html { redirect_to user_session_url(@user), notice: 'User was successfully created.' }
        format.json { render :show, status: :created, location: @user }
      else
        render 'new'
      end
    end 

До сих пор я заметил, что когда я меняю строки ресурсов: пользователи с devise_for: пользователи, он не выдает ошибку, но при перечислении всех пользователей он сохраняет только те письма и пароль, которые требуются devise, а не другие данные пользователя, такие как имя, фамилия и т. д.

Это мой файл User.rb:

class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable
  validates :name, presence: true, length: {minimum:2, maximum:20}
  validates :last_name, presence: true, length: {minimum:2, maximum:20}
end

Ответы [ 2 ]

0 голосов
/ 27 апреля 2019

Прежде всего, когда мы пишем

devise_for :users

Он создает предопределенные маршруты для вас, которые включают путь sign_up и sign_in. если вы хотите сохранить дополнительные параметры, «очистите» их. Например:

class ApplicationController < ActionController::Base
   protect_from_forgery with: :exception
   before_action :configure_permitted_parameters, if: :devise_controller?

   protected
    def configure_permitted_parameters
       devise_parameter_sanitizer.permit(:sign_up, keys: [:name, :lastname])
    end
 end

Если вы хотите создать собственный настраиваемый контроллер и маршруты, пропустите предопределенные маршруты, например:

 devise_for :users, :skip => [:sessions, :passwords, :registrations]

и сделайте это самостоятельно в файле rout.rb:

devise_for :users, :skip => [:sessions, :passwords, :registrations]

namespace :api, defaults: {format: :json} do
    devise_for :users, :controllers => {
         :sessions => "api/sessions",
         :passwords => "api/passwords"
    }
end

И session_controller.rb

def session_params
    params.require(:session).permit(:name, :last_name, :all_extra_parameters_defined_here)
end

В user_controller нет необходимости использовать format.html, просто перенаправьте его.

0 голосов
/ 27 апреля 2019

ваши user_params должны содержать:

     def user_params
          params.require(:user).permit(:name, :email, :last_name, 
          :admin, :password, 
       :remember_me)
    end

Вы не показали эту часть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...