我想通過ActiveRecord獲取下一個/上一個記錄。根據'updated_at'列的順序檢索記錄。在Ruby on Rails上的ActiveRecord中獲取下一個/上一個記錄
模型的名稱是'Youtube'。而作爲以下控制檯,此代碼無法獲得正確的記錄,我猜我的代碼的想法似乎不好,因爲updated_at並不總是唯一的所以一些記錄可能有相同的時間戳。
如何以正確的方式獲取下一個/上一個記錄?
控制檯如下所述。
[57] pry(main)> Youtube.find(1000)
Youtube Load (0.5ms) SELECT "youtubes".* FROM "youtubes" WHERE "youtubes"."id" = $1 ORDER BY updated_at DESC LIMIT 1 [["id", 1000]]
=> #<Youtube id: 1000, author_id: 2, category_label: nil, generated_by: 1, title: "Is Kenya Mall Shooting Over? Were Americans Among A...", video_id: "4T1szQIQcNI", created_at: "2013-09-30 18:31:21", updated_at: "2013-10-27 02:19:56", subtitles: nil>
[58] pry(main)> Youtube.find(1000).next
Youtube Load (0.6ms) SELECT "youtubes".* FROM "youtubes" WHERE "youtubes"."id" = $1 ORDER BY updated_at DESC LIMIT 1 [["id", 1000]]
Sun, 27 Oct 2013 02:19:56 UTC +00:00
Youtube Load (256.6ms) SELECT "youtubes".* FROM "youtubes" WHERE (updated_at > '2013-10-27 02:19:56.593969') ORDER BY updated_at DESC LIMIT 1
=> #<Youtube id: 67003, author_id: 75, category_label: nil, generated_by: 1, title: "Jewelry Photography : Lenses for Jewelry Photograph...", video_id: "NqA7OZL4tzw", created_at: "2013-10-09 17:18:53", updated_at: "2013-10-28 02:17:33", subtitles: nil>
[59] pry(main)> Youtube.find(1000).previous
Youtube Load (0.6ms) SELECT "youtubes".* FROM "youtubes" WHERE "youtubes"."id" = $1 ORDER BY updated_at DESC LIMIT 1 [["id", 1000]]
Sun, 27 Oct 2013 02:19:56 UTC +00:00
Youtube Load (56.3ms) SELECT "youtubes".* FROM "youtubes" WHERE (updated_at < '2013-10-27 02:19:56.593969') ORDER BY updated_at DESC LIMIT 1
=> #<Youtube id: 999, author_id: 8, category_label: nil, generated_by: 1, title: "[email protected]: Richard Moore, Ned Boulting, and Da...", video_id: "4SCzfuJAyJw", created_at: "2013-09-30 18:31:21", updated_at: "2013-10-27 02:19:55", subtitles: nil>
Youtube有以下的default_scope。雖然這可能會根據某些情況而改變,但我希望這些代碼能夠保持現有的行爲。
default_scope order('updated_at DESC')
我的Youtube模型的試用代碼如下。
scope :next, lambda{|updated_at| where("updated_at > ?",
updated_at).order("updated_at DESC")}
scope :previous, lambda {|updated_at| where("updated_at < ?",
updated_at).order("updated_at DESC")}
...
def next
self.class.next(updated_at).first
end
def previous
self.class.previous(updated_at).first
end
在這裏看到:http://stackoverflow.com/questions/7394088/rails-get-next-previous-record –
達米安,我檢查http://stackoverflow.com/questions/7394088/rails-get-next-previous-record,但它不是這種情況下正確的解決方案,如上所述。 – gipcompany
可能重複的[Rails:「下一篇文章」和「以前的帖子」鏈接在我的節目視圖,如何?](http://stackoverflow.com/questions/1275963/rails-next-post-and-previous-post -links-in-my-show-view-how-to) –