2013-09-06 27 views
7

Tôi muốn có phạm vi trong Rails để chỉ chọn giá trị giữa hai ngày.Phạm vi đường ray cho các giá trị chỉ giữa hai ngày

Dưới đây là ví dụ của tôi:

Tôi có một mô hình với các thuộc tính 'STARTDATE' và 'ENDDATE'. Cả hai đều có loại 'ngày'

Bây giờ tôi muốn chọn mọi mục nhập từ hôm nay, là giữa hai ngày này.

Tôi đã tạo phạm vi trông như thế này.

class Product < ActiveRecord::Base 
    scope :activeDate, -> { where("? >= ? AND ? <= ?", Time.now.to_date, :saleStartDate, Time.now.to_date, :salesEndDate)} 

Trong bộ điều khiển:

@products = Product.activeDate 

Đáng tiếc là nó không hoạt động. Có một đường ray (đẹp hơn) để có được tất cả các mục?

Cảm ơn rất nhiều.

+5

Quy ước Ruby sẽ có phạm vi được gọi là active_date thay vì activeDate. – Dan

Trả lời

16

Bạn có thể làm điều này:

scope :activeDate, -> { where("? BETWEEN startDate AND endDate", Time.now.to_date)} 

Vì bạn đang sử dụng lớn hơn hoặc bằng VÀ ít hoặc bằng, bạn có thể sử dụng chức năng SQL tương đương "GIỮA".

Bạn không cần phải chuyển đổi Thời gian để một ngày, bạn có thể trực tiếp gọi Date.today:

scope :activeDate, -> { where("? BETWEEN startDate AND endDate", Date.today)} 

Bạn có thể cải thiện phạm vi của bạn bằng cách làm này:

scope :activeAtDate, lambda{ |date = Date.today| where("? BETWEEN startDate AND endDate", date) } 

Và sử dụng nó như sau:

Product.activeAtDate() #=> use the Date.today 
Product.activeAtDate(1.week.ago.to_date) #=> use Today - minus 7 days 
+1

Ah, hoàn hảo. Cảm ơn bạn rất nhiều! Điều đó thật tuyệt! –

Các vấn đề liên quan