【问题标题】:How can i return some message if before_validation method is false by Sinatra如果 Sinatra 的 before_validation 方法为假,我如何返回一些消息
【发布时间】:2016-01-30 17:05:39
【问题描述】:

我想返回一些消息,告诉用户他们的密码与确认密码字段不匹配。

这是我的代码

post '/signup' do
    user = User.new(params[:user])
    if user.create_user
        "#{user.list}"
    else
        "password not match"
    end
end

require 'bcrypt'

class User < ActiveRecord::Base
    include BCrypt
    # This is Sinatra! Remember to create a migration!

    attr_accessor :password

    validates :username, presence: true, uniqueness: true
    validates :email, :format => { :with => /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z]+)*\.[a-z]+\z/i ,
    :message => "Email wrong format" }
    validates :email, uniqueness: true,presence: true
    validates :encrypted_password, presence: true
    validates :encrypted_password, length: { minimum: 6 }

    before_validation :checking_confirm_password

    def initialize(signup = {})
        #@signup = signup
        super()
        @username = signup["username"]
        @email = signup["email"]
        @password = signup["password"]
        @confirm_password = signup["confirm_password"]
    end

    def create_user
        p_p = Password.create(@password)
        p_h ||= Password.new(p_p)
        user_hash = {:username => @username,:email => @email, :encrypted_password => p_h}

        return User.create(user_hash)

    end

    def list
        User.all
    end

    private

    def checking_confirm_password
        if @password != @confirm_password
            return false
        end
    end

end

那么我该如何具体说明将发送回用户的消息, 如果他们的密码不匹配或在创建数据之前验证失败?

谢谢!

【问题讨论】:

    标签: ruby activerecord sinatra


    【解决方案1】:

    验证通过字段填充所有验证错误和所有验证错误@user.errors,因此您可以轻松地一次返回所有验证错误,如下所示:

    post '/signup' do
      user = User.new(params[:user])
      if user.create_user
        "#{user.list}"
      else
        user.errors.full_messages
      end
    end
    

    看看:http://edgeguides.rubyonrails.org/active_record_validations.html#working-with-validation-errors

    【讨论】:

    • 为什么即使密码不匹配或电子邮件不唯一,我也从未收到错误消息?
    • @user3403614 你如何检查响应?你如何判断是否有错误?在我添加的 sn-p 中,我们仍然返回 HTTP 状态 200,这对 AJAX 回调有影响(除其他外)。如果这确实是您的情况,请在发送响应之前添加 status 422
    • 现在我只想从 User.create(user_hash) 返回 true 或 false 然后我可以在控制器中检查它
    • 现在 create_user 方法总是返回 true,即使我没有在表单中输入任何信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-14
    • 2016-06-21
    • 2011-06-26
    • 1970-01-01
    • 2017-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多