Ruby on rails Rails验证在创建时有效,但在更新时无效

Ruby on rails Rails验证在创建时有效,但在更新时无效,ruby-on-rails,validation,Ruby On Rails,Validation,这是我的密码: validate :ranges_overlap def ranges_overlap Commission.where("commission_type = ?",self.commission_type).each do |c| for i in self.start_range.to_i..self.end_range.to_i do if i >= c.start_range and i <= c.end_ra

这是我的密码:

validate :ranges_overlap

def ranges_overlap
    Commission.where("commission_type = ?",self.commission_type).each do |c|
        for i in self.start_range.to_i..self.end_range.to_i do
            if i >= c.start_range and i <= c.end_range
                self.errors.add(:start_range, "Range overlaps existing range: #{c.start_range} - #{c.end_range}") 
                break
            end
        end
    end     
end
因此,它允许我进行更新,但它有效地禁用了验证,使用此代码,我可以在创建和更新时重叠任何范围,就好像我根本没有进行验证一样

我绝对没有意识到一些简单的事情。我的验证有什么错

谢谢

编辑:控制器上的更新操作

def update
    respond_to do |format|
      if @commission.update(commission_params)
        format.html { redirect_to commissions_path, notice: 'Commission updated successfully' }
        format.json { render :show, status: :ok, location: commissions_path }
      else
        format.html { render :edit }
        format.json { render json: @commission.errors, status: :unprocessable_entity }
      end
    end
end
这起到了作用:

def ranges_overlap
    Commission.where("commission_type = ?",self.commission_type).each do |c|
        unless self.id == c.id
            for i in self.start_range.to_i..self.end_range.to_i do
                if i >= c.start_range and i <= c.end_range
                    self.errors.add(:start_range, "Range overlaps existing range: #{c.start_range} - #{c.end_range}") 
                    break
                end
            end
        end 
    end
end
def范围\u重叠
佣金。其中(“佣金类型=?”,self.Commission类型)。每个do | c|
除非self.id==c.id
因为我在self.start\u range.to\u i..self.end\u range.to\u i do

如果i>=c.start_range,并且我请显示您的控制器更新操作,请尝试此
Commission.where(“id不在(?)中,Commission_type=?”,self.id,self.Commission_type)。每个都执行

def ranges_overlap
    Commission.where("commission_type = ?",self.commission_type).each do |c|
        unless self.id == c.id
            for i in self.start_range.to_i..self.end_range.to_i do
                if i >= c.start_range and i <= c.end_range
                    self.errors.add(:start_range, "Range overlaps existing range: #{c.start_range} - #{c.end_range}") 
                    break
                end
            end
        end 
    end
end