2010-02-21 27 views
6

Hãy tưởng tượng tôi có các Bài viết wiki, với nhiều Bản sửa đổi. Tôi muốn làm một truy vấn với ActiveRecord thông qua cơ sở dữ liệu, mà chỉ trả về những bài viết có bản sửa đổi được cập nhật trong 24 giờ qua. Là một điều như vậy có thể?Rails ActiveRecord: Là kết hợp: bao gồm và: điều kiện truy vấn có thể?

Tôi muốn tưởng tượng nó muốn được một cái gì đó như:

Articles.find_all(:include => :revisions, 
        :conditions => {:revision[updated_at] => 1.week.ago..Time.now.utc}) 

Nếu đây là không thể, là có một số loại SQL liệu tôi có thể vượt qua để find_by_SQL rằng sẽ làm các việc lừa?

Trả lời

4

Nếu bạn chỉ cần bài viết và không cần tải mong muốn của tất cả các bản sửa đổi, bạn có thể sử dụng: tham gia thay thế. Nó sử dụng ít bộ nhớ hơn vì nó không tải trước tất cả các bản sửa đổi cho mỗi bài viết. Sử dụng: bao gồm mặc dù nếu bạn sẽ làm một cái gì đó như article.revisions.

Article.find(:all, 
    :joins => :revisions, 
    :conditions => ["revisions.updated_at > ?", 24.hours.ago] 
) 
+0

Trường hợp bạn muốn tìm TẤT CẢ các bài viết cũng như JUST các bản sửa đổi đã được cập nhật 24 giờ trước? (thay vì giảm số bài viết quá). – sscirrus

+0

Nếu bạn muốn các bài viết và bản sửa đổi, tôi sẽ sử dụng: bao gồm thay vì: join –

3

Tùy thuộc vào cách bạn đặt tên mô hình chính xác, nó sẽ giống như thế này.

Article.find(:all, :include => :revisions, :conditions => ["revisions.updated_at > ?", 1.week.ago]) 
Các vấn đề liên quan