Ruby on rails ActiveRecord如何使用相关1到n模型的计数更新模型

Ruby on rails ActiveRecord如何使用相关1到n模型的计数更新模型,ruby-on-rails,ruby-on-rails-3,activerecord,Ruby On Rails,Ruby On Rails 3,Activerecord,我有两个模型,它们之间的关系为1:n: 第1册n页 我想对所有的书(大约30万册)做一个更新声明。图书模型有一个列interest\u pages\u count,它需要从所有页面中总结出interest属性设置为true的页面 这在一个声明中是可能的吗 谢谢, Makrus你可以试试 Book.update\u all({:field=>value},其中\u条件) 或者使用简单的SQL查询。好吧,只有一条语句是非常有野心的,但是如果您在图书模型上定义了此方法: def count_inter

我有两个模型,它们之间的关系为1:n:

第1册n页

我想对所有的书(大约30万册)做一个更新声明。图书模型有一个列interest\u pages\u count,它需要从所有页面中总结出interest属性设置为true的页面

这在一个声明中是可能的吗

谢谢, Makrus

你可以试试

Book.update\u all({:field=>value},其中\u条件)


或者使用简单的SQL查询。

好吧,只有一条语句是非常有野心的,但是如果您在图书模型上定义了此方法:

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)}

至少在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;