[英]will_paginate mass operations with specific page don't work
Rails 4.2.5和will_paginate 3.1.0。
我被困了一段時間無法使用will_paginate進行大規模操作(例如update_all
),並且在調查時發現了一些奇怪的行為。 有人可以解釋其背后的原因嗎?
假設我的數據庫中有22位用戶,並且per_page = 10
:
User.all.page(3)
將返回正確的用戶(用戶21和用戶22),但是:
User.all.page(3).count # => 22
而
User.all.offset(2 * User.per_page).limit(User.per_page).count # => 2
我正在處理的特定問題是,如果我做這樣的事情:
User.all.page(3).update_all(flagged: true)
我得到第一頁更新(用戶1-10),而不是第三頁(用戶21-22)。
有沒有一種方法可以在控制器內使用will_paginate page
方法來僅操縱特定頁面內的記錄?
更新:
有趣的是,即使.offset().limit()
大規模更新仍然無法工作,我也得到了相同的結果: 第一頁被更新,而不是最后一個(用戶1-10,而不是21-22 )。
所以當
User.all.offset(2 * User.per_page).limit(User.per_page).count # => 2
User.all.offset(2 * User.per_page).limit(User.per_page).update_all(flagged: true)
仍會更新前10個用戶,而不是最后2個。
到目前為止,我User.all.page(3).each { |user| user.update(flagged: true) }
的唯一方法是執行User.all.page(3).each { |user| user.update(flagged: true) }
User.all.page(3).each { |user| user.update(flagged: true) }
效果很好,但效果似乎很差。
嘗試將.per_page(10)添加到活動記錄查詢中
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.