У меня проблема с моим Rails-API, в частности ActiveRecord утверждает, что - когда бы я ни пытался создать пользователя - пользователь уже существовал.
Это моя текущая настройка: Ruby -v 2.5.1p57 / Rails 5.2 (только API)
Я использую Postman для доставки HTTP-запроса POST к моей конечной точке API, однако я не могу создать пользователей вообще.
Вот как выглядит моя User-Model:
class User < ApplicationRecord
validates_uniqueness_of :username
has_secure_password
has_secure_token :auth_token
def invalidate_token
self.update_columns(auth_token: nil)
end
def self.validate_login(username, password)
user = find_by(username: username)
if user && user.authenticate(password)
user
end
end
end
Я хорошо знаю, что я проверяю уникальность имени пользователя здесь, но меня поражает то, что имена пользователей, которые я тестировал в почтальоне,нет единой DB-записи.
Далее моя текущая версия UsersController:
module Api::V1
class UsersController < ApiController
before_action :require_login, except: [:create]
# GET /users
# GET /users.json
def index
@users = User.all
render json: @users
end
# GET /users/1
# GET /users/1.json
# def show
# end
def profile
user = User.find_by_auth_token!(request.headers[:token])
render json: { user: { username: user.username, email: user.email, first_name: user.first_name } }
end
# GET /users/new
def new
@user = User.new
end
# GET /users/1/edit
def edit
end
# POST /users
# POST /users.json
def create
user = User.create!
render json: { token: user.auth_token }
end
# PATCH/PUT /users/1
# PATCH/PUT /users/1.json
def update
respond_to do |format|
if @user.update(user_params)
format.html { redirect_to @user, notice: 'Nutzer wurde erfolgreich bearbeitet.' }
format.json { render :show, status: :ok, location: @user }
else
format.html { render :edit }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
# DELETE /users/1
# DELETE /users/1.json
def destroy
@user.destroy
respond_to do |format|
format.html { redirect_to users_url, notice: 'Nutzer wurde gelöscht.' }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_user
@user = User.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def user_params
params.require(:user).permit(:username, :first_name, :last_name, :email, :password)
end
end
end
Это то, что мой rails-терминал отвечает, когда я пытаюсь POST к конечной точке:
Processing by Api::V1::UsersController#create as JSON
(0.1ms) BEGIN
↳ app/controllers/api/v1/users_controller.rb:35
User Exists (5.0ms) SELECT 1 AS one FROM "users" WHERE
"users"."username" IS NULL LIMIT $1 [["LIMIT", 1]]
↳ app/controllers/api/v1/users_controller.rb:35
(0.2ms) ROLLBACK
↳ app/controllers/api/v1/users_controller.rb:35
Completed 422 Unprocessable Entity in 9ms (ActiveRecord: 5.3ms)
ActiveRecord::RecordInvalid (Gültigkeitsprüfung ist fehlgeschlagen: Username ist bereits vergeben, Password muss ausgefüllt werden):
Последняя строка переводится как: Проверка не пройдена: Имя пользователя уже занято, Пароль не должен быть пустым.
Любые советы приветствуются!