2009-07-07 23 views
30

Tôi có một quá trình lặp qua một loạt các mô hình ActiveRecord, thực hiện một số xử lý và lưu lại mô hình. Thông thường, quá trình xử lý không dẫn đến thay đổi các thuộc tính và do đó cột updated_at không bao giờ thay đổi (mặc dù lưu được gọi)."Chạm vào" cột updated_at trong Rails 2.3.2

Tôi không muốn tắt cập nhật một phần (nói chung, chúng hữu ích). Tôi đoán rằng hai lựa chọn của tôi là:

  1. Thêm một cột timestamp riêng biệt với mô hình (ví dụ: 'processed_at') và quản lý này bản thân mình, mặc dù điều này có vẻ hơi lãng phí/không cần thiết.
  2. Hoặc bằng cách nào đó, hãy ghi đè quyền quản lý thuộc tính updated_at?

Tôi đã nghe nói rằng Rails 3 sẽ có phương pháp 'chạm' chính xác những gì tôi đang tìm kiếm.

Bất kỳ ý tưởng/tùy chọn/ý kiến ​​nào?

Trả lời

52

Trên thực tế phương pháp touch là đã có trong Rails 2.3.x, vì vậy bạn chỉ có thể làm:

model.touch 

Để cập nhật cột updated_at. Ngoài ra, để cập nhật một số cột khác với ngày tháng và thời gian sử dụng hiện tại:

model.touch(:column_name) 
+0

Wow! Bạn đúng. Bài học kinh nghiệm, không tin mọi thứ bạn đọc trong một bài đăng trên blog (http://ryandaigle.com/articles/2009/4/20/what-s-new-in-edge-rails-touching), chỉ cần đi thẳng đến nguồn (http://github.com/rails/rails/blob/0d3c5f0a822cd1b6029b5f619774b7794a94f370/activerecord/lib/active_record/timestamp.rb#L27) – ideasasylum

+0

Tôi nghĩ DHH có thể đã đề cập đến nó trên Twitter - đó là cách tôi biết về nó. –

+0

Grrr ... có vẻ như hỗ trợ cảm ứng vừa bị bỏ qua bản phát hành 2.3.2 và chỉ nằm trong nhánh 2.3-STABLE. Không có mốc quan trọng 2.3.3 nhưng 2.3.4 được liệt kê là ngày 18 tháng 7. Tôi đoán tôi sẽ phải đợi :-( – ideasasylum

1

Bây giờ dòng 2.3.x đã đến và đi, một câu trả lời dứt khoát hơn là cảm ứng đã không làm cho nó vào ActiveRecord cho đến khi 2.3.8 . Vì vậy, bất cứ ai sử dụng vẫn còn sử dụng Rails 2.3.2 (như OP đã được - và như tôi hiện đang) sẽ cần phải tìm một cách khác để "chạm" hồ sơ của họ.

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