【发布时间】:2018-05-16 22:46:05
【问题描述】:
我的user 模型看起来像这样,其中type 是user 表中的列,std 仅用于在用户注册时获取附加数据。现在当user(type: Student) 登录时,再次设计成功呈现带有消息登录的登录页面不会呈现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
设计::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
【问题讨论】:
标签: ruby-on-rails validation devise