我有两个模型之间有1到n的关系:
第1册< - > n页
我想对所有图书(约300'000)进行更新声明。 Book模型有一列interesting_pages_count,需要将所有有趣属性设置为true的页面汇总。
这是否可以在一个声明中使用?
谢谢, Makrus
答案 0 :(得分:1)
至少在PostgreSQL中是可能的:
UPDATE books SET interesting_pages_count = (
SELECT count(*) FROM pages WHERE pages.book_id = books.id AND interesting = true
) FROM pages WHERE books.id = pages.book_id;
答案 1 :(得分:0)
您可以尝试使用
Book.update_all({:field => value}, where_condition)
或使用纯SQL查询。
答案 2 :(得分:0)
嗯,只有一个声明真的雄心勃勃,但如果你在Book模型上定义这个方法:
def count_interesting_pages
self.pages.inject(0) { |result, page| result += 1 if page.interesting?}
end
然后你可以这样做:
Book.all.each {|b| b.update_attribute(:interesting_pages, count_interesting_pages)}