通过参数进行轨道验证



我的客户模型有first_name,last_name和phone_number。在创建用户时,我想使用 phone_number 验证如果phone_number存在,则使用相同的数据,否则创建新客户。我该怎么做?

def create
    @customer = Customer.new(customer_params)
    respond_to do |format|
      if @customer.save
        format.html { redirect_to @customer, notice: 'Customer was successfully created.' }
        format.json { render :show, status: :created, location: @customer }
      else
        format.html { render :new }
        format.json { render json: @customer.errors, status: :unprocessable_entity }
      end
    end
  end 

我试过这个,但它并不完美

 def check_presence
     params[:phone_number].exists?
    end
    def validate_presence
     if !check_presence
       Customer.new
     end
    end

在您的客户模型中(customer.rb(,您可以这样做

validates :phone_number, presence: true

validates_presence_of :phone_number

尝试以下代码:

客户模型

before_save :check_phone
def check_phone
  Customer.exists?(phone: self.phone) ? false : true
end

请使用方法first_or_create方法,下面发布一个示例

@customer = Customer.where(:phone_number => phone_number).first_or_create(customer_params)

参考文档:Ruby Doc for First_or_Create

最新更新