2010-04-26 39 views
12

Tôi đang cố gắng tìm cách tốt nhất để truy vấn phạm vi ngày từ đường ray ... Tôi đã xem xét trên Google nhưng không chắc chắn về cách sử dụng cú pháp.Đường ray - Đang cố truy vấn từ một phạm vi ngày ... mọi thứ từ hôm nay

Tôi có một Mô hình có nhiều sự kiện khác nhau và tôi muốn thêm vào điều kiện tìm thấy của mình trước khi chỉ hiển thị các sự kiện trong trường: st_date là ngày hôm nay hoặc muộn hơn, chỉ hiển thị cho tôi dữ liệu hiện tại đã xảy ra trước ngày hôm nay.

Tôi gặp sự cố vì tôi không có ngày kết thúc để ngừng truy vấn, tôi muốn truy vấn mọi thứ từ hôm nay đến tháng sau.

Tôi đã suy nghĩ cái gì đó như

@events = Event.find(:all, :conditions => ["start_date between ? and ?", 
     date.Today, date.next_month.beginning_of_month]) 

nhưng tôi nhận được lỗi biến địa phương không xác định hoặc phương pháp 'date' ......

Tôi có cần phải làm bất cứ điều gì đặc biệt để sử dụng lớp ngày ? Hay có gì sai với cú pháp truy vấn của tôi? Tôi thực sự sẽ đánh giá cao sự giúp đỡ nào.

Trả lời

15

Bạn muốn Date.today, chứ không phải date.today. Không có gì sai với những gì bạn đang làm, bạn chỉ cần không tham chiếu đến lớp ngày đúng

Hơn nữa nó sẽ là Date.today.next_month.beginning_of_month

+0

Cảm ơn rất nhiều, những điều nhỏ nhất của nó thường .... – ChrisWesAllen

6

Event.where(:start_date => Date.today..Date.today.next_month.beginning_of_month) cũng hoạt động tốt là.

1

Hãy nhìn vào Plugin by_star tôi cho phép bạn làm những việc như:

Event.by_month(Time.now, :field => "start_date") 
14

tôi sẽ mang nó một bước xa hơn và xác định một phạm vi trong mô hình của bạn để tái sử dụng.

# rails 3 example: 
# app/models/event.rb 
scope :upcoming, lambda { 
    where("start_date between ? and ?", Date.today, Date.today.next_month.beginning_of_month) 
} 

# app/controllers/some_controller.rb 
@events = Event.upcoming 

Ngoài ra còn có một Railscasts lớn tập trên phạm vi trong Rails 3:
http://railscasts.com/episodes/202-active-record-queries-in-rails-3

+4

không nên phạm vi của bạn bao gồm lambda {} biểu tượng để các ngày đó được đánh giá tại thời điểm sử dụng, thay vào đó khi lớp được tải? – craig

+0

bạn là đúng - cảm ơn craig! – mrwade

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