2011-06-30 42 views
6

Tôi đang phát triển API bằng Rails 3. Người dùng có thể có một số mục liên hệ, như điện thoại, email, trang web và địa chỉ. Mỗi mục có mô hình riêng của nó.Rails 3. Nhận cập nhật gần đây nhất

Tôi cần lưu bộ nhớ cache trong ứng dụng iPhone đang sử dụng API này vì vậy tôi cần có ngày cập nhật mới nhất cho bất kỳ mục nào đã xảy ra và khớp với dấu thời gian của tệp bộ nhớ cache.

Làm cách nào để có được các mục được cập nhật nhiều nhất (khi so sánh tất cả các bảng mục)?

Tôi nhận được mục gần đây nhất cho mỗi bảng mục như thế này. Điều này thực sự tốt?

@phones = @user.phones.order("updated_at desc").limit(1) 

Cảm ơn mọi sự giúp đỡ!

Trả lời

13

Bạn có thể sử dụng phương pháp touch của ActiveRecord. Điều này đặc biệt hữu ích nếu bạn có một bản ghi cha với nhiều bản ghi con. Mỗi lần các bản ghi con được lưu hoặc hủy bản ghi phụ huynh sẽ có trường updated_at được đặt thành thời gian hiện tại.

class User < ApplicationRecord 
    has_many :phones 
    has_many :addresses 
end 

class Phone < ApplicationRecord 
    belongs_to :user, touch: true 
end 

class Address < ApplicationRecord 
    belongs_to :user, touch: true 
end 

Bây giờ bất kỳ lúc nào địa chỉ hoặc điện thoại được cập nhật, người dùng updated_at sẽ được đặt thành thời gian hiện tại.

Để kiểm tra khi được cập nhật cho người dùng hiện cuối cùng diễn ra, trên tất cả các bảng của họ, bây giờ bạn làm:

@last_updated = @user.updated_at 

Đối với một chi phí nhỏ trong viết bạn có được nhiều với các truy vấn đơn giản hơn về kiểm tra bộ nhớ cache hết hạn. Tài liệu này có thể được tìm thấy dưới .

+0

Điều này thật tuyệt! Tôi không biết rằng điều này đã tồn tại. Bạn đã cứu Douglas của tôi. Cảm ơn bạn rất nhiều! –

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