Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 验证价格范围重叠_Ruby On Rails_Ruby_Ruby On Rails 3_Validation_Rails Models - Fatal编程技术网

Ruby on rails 验证价格范围重叠

Ruby on rails 验证价格范围重叠,ruby-on-rails,ruby,ruby-on-rails-3,validation,rails-models,Ruby On Rails,Ruby,Ruby On Rails 3,Validation,Rails Models,我正在开发一个输入多个价格范围的应用程序。我想验证价格范围,以防止它与其他价格范围重叠。我知道如何检查两个数组是否重叠,例如 a = [1.0, 2.0] b = [2.0, 3.0] a & b #=> true 我有两个字段price_start和price_end,因此这两个字段之间的价格范围不应与另一个字段重叠 但这是一个范围,例如1.0美元到10.0美元,然后是下一个10.1美元到20美元,我们如何实现这一点?请帮忙!谢谢您可以编写如下自定义验证: validates

我正在开发一个输入多个价格范围的应用程序。我想验证价格范围,以防止它与其他价格范围重叠。我知道如何检查两个数组是否重叠,例如

a = [1.0, 2.0]
b = [2.0, 3.0]

a & b #=> true
我有两个字段price_start和price_end,因此这两个字段之间的价格范围不应与另一个字段重叠


但这是一个范围,例如1.0美元到10.0美元,然后是下一个10.1美元到20美元,我们如何实现这一点?请帮忙!谢谢

您可以编写如下自定义验证:

validates :price_range_must_not_overlap

private
def price_ranges_must_overlap
  range = (price_start..price_end)
  if self.class.
          where('id <> ?', self.id)
          where('(price_start BETWEEN :price_start AND :price_end) OR (price_end BETWEEN :price_start AND :price_end)',
                { :price_start => price_start,
                  :price_end   => price_end }).any?
    errors.add(:base, "Price range overlaps with an existing price range")(b)
  end
end
验证:价格范围不能重叠
私有的
def价格范围必须重叠
范围=(价格开始..价格结束)
如果你是自学班。
其中('id?',self.id)
其中(‘(价格开始于:价格开始于:价格开始于:价格结束于)或(价格结束于:价格开始于:价格结束于:价格结束于)’,
{:price\u start=>price\u start,
:price\u end=>price\u end})。有吗?
错误。添加(:base,“价格范围与现有价格范围重叠”)(b)
结束
结束
查找器条件可能被提取到范围中


在Rails指南中了解更多信息:

人们应该尝试回答问题,而不是投反对票!