before_validation方法不起作用

开发者

我是一名新手,正在从事一个项目,并希望从用户名和电子邮件中删除尾随和前导空格。所以我在用户模型中创建了一个方法

class User < ActiveRecord::Base

    include CarrierWave::MiniMagick

    #removes the white spaces before validating the data 


    before_validation :strip_whitespace, :only => [:name,:email]

    #data validations
    validates :email, :presence =>true,  :uniqueness => {case_sensitive: false}, :format => { :with=> /([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)/, :message => "please enter a valid e-mail" }
    validates :name, :presence=>true
    validates :password ,:presence =>true, :confirmation=> true #, :length =>{ :minimum=>6, :maximum=>30}, :format=>{:with=>/(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,30}/}

    #for the image
    mount_uploader :image, ImageUploader

    #for the password
    has_secure_password


    #associations
    has_many :issues
    has_many :comments

end



def strip_whitespace
    self.email = self.email.squish
    self.name = self.name.squish
end

当我在Users.create操作中输入用户信息时,前导和尾随空格将被删除,但是当我从会话控制器登录时,前导和尾随空格不会被删除,因此它向我显示了一个错误。请帮忙

用户控制器的代码

class UsersController < ApplicationController
before_action :not_logged_in?, :only => [:new]  

  def new
    @user=User.new
  end

  def create
  @user = User.new(user_params)
    if @user.save 
      sign_in @user
      RegistrationsMailer.welcome_email(@user).deliver
        flash[:success] = 'you are successfully registered'
        redirect_to :controller => 'users' , :action => 'show', :id => @user.id
     else
        render 'new'
     end 
  end


  def show
    @user=User.find(params[:id])
  end

  def edit
    @user = User.find(params[:id])
  end

  def update
    @user = User.find(params[:id])
    if @user.update_attributes(user_params)
      redirect_to @user
    else 
      render 'edit'
    end
  end


protected
    def user_params
    params.require(:user).permit(:name,:email,:password,:image) 

    end

end

会话控制器代码

class SessionsController < ApplicationController

    def new


    end


    def create
        @user = User.find_by_email(params[:sessions][:email])
        if @user && @user.authenticate(params[:sessions][:password])
            sign_in @user
            redirect_to @user
        else 
            flash.now[:error] = 'Invalid email or password'
            render 'new'
        end

    end



    def destroy
    end


end

请帮忙

Nosajool

根据验证何时发生?

以下方法触发验证,并且仅在对象有效时才将对象保存到数据库中:

创建

创造!

保存!

更新

更新!

创建或销毁新会话时,实际上不会在User模型上调用任何这些方法,因此不会调用验证。

但是,由于数据库具有压缩的值,因此您需要在SessionsController中修改create动作以压缩传入的参数。

def create
    @user = User.find_by_email(params[:sessions][:email].squish)
    if @user && @user.authenticate(params[:sessions][:password].squish)
        sign_in @user
        redirect_to @user
    else 
        flash.now[:error] = 'Invalid email or password'
        render 'new'
    end
end

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章