我得到了一些数据,如:book.pages
我想更新一些页面,我的代码如下:
book.pages.offset(1).update_all(updated_at: Time.now)
我认为本书除了第一页以外的所有页面都会更新。然而,结果是包括第一个页面在内的所有页面都得到了更新。
我很困惑。有人可以向我解释一下吗?
答案 0 :(得分:0)
据我所知,offset在mysql更新中没有任何作用。您可以使用限制,但我认为这不会对您的情况有所帮助。
如果你真的需要这样做,请尝试这一行:
book.pages.where('id != ?', book.pages.first.id).update_all(updated_at: Time.now)
您也可以使用mysql语句手动执行此操作,但这会很痛苦。类似的东西:
Book.connection.execute(%[
UPDATE book_pages
INNER JOIN books ON books.id = book_pages.book_id
INNER JOIN (
SELECT id, book_id, MIN(book_pages.id) FROM book_pages GROUP BY book_id
) as bp ON bp.book_id = book_pages.id
WHERE book_pages.id != bp.id && books.id == #{book.id}
])