Моя user
модель выглядит следующим образом: type
- это столбец в таблице user
, а std
используется только для получения дополнительных данных во время входа пользователя sign_up.Отрисованная страница входа с успешным входом в систему сообщения не отображает root_path
, а в журнале отображается транзакция отката, но когда я обновил страницу, он отображает root_path
.Эта проблема возникает только для type:Student
, и когда я удаляю строку validates_presence_of :std
, все работает отлично.
Теперь вопрос в том, почему это происходит или как это можно сделать?
class User < ApplicationRecord
attr_accessor :std
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
validates_presence_of :type
validates_presence_of :std , allow_blank: false , if: -> { type == 'Student' },
message: 'Student must add grade to continue'
end
Devise :: RegistrationsController.rb
class RegistrationsController < Devise::RegistrationsController
def create
super
if params[:user][:type] == 'Student' and user_signed_in?
current_user.grade = Grade.new({cls: params[:user][:std].to_i})
current_user.save
end
end
private
def sign_up_params
params.require(:user).permit(:email, :password, :password_confirmation, :type, :std)
end
end