2014-09-24 67 views
-1

我正在處理一個應用程序,我正在輸入多個價格範圍。我想驗證價格範圍以防止它與另一個價格範圍重疊。我知道如何檢查兩個數組是否重疊或沒有,例如,驗證價格範圍重疊

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

a & b #=> true 

我有兩個字段price_start和price_end,所以這兩個領域之間沒有價格區間應與其他

重疊,但在這裏它的一個範圍,例如$ 1.0 - $ 10.0然後下一個$ 10.1到$ 20,我們如何實現這個?請幫忙!感謝

+2

人們應該嘗試回答這個問題,而不是downvoting的! – RSB 2014-09-24 07:34:16

回答

1

你可以寫一個自定義的驗證這樣的:

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 

取景條件可能被提取到一個範圍。

瞭解更多有關此內容的Rails指南:http://guides.rubyonrails.org/active_record_validations.html#custom-methods

+0

感謝您的回答,但我不希望價格範圍重疊。此外它不檢查價格範圍是否與任何現有記錄重疊 – RSB 2014-09-24 07:32:58

+0

感謝您的答案,你能告訴我如何使用它與MongoDB,我使用的是mongoid。 – RSB 2014-09-24 09:17:27

+0

@RSB:如果你告訴那個前期的話,會很好... – spickermann 2014-09-24 10:20:50