首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ActiveRecord如何使用相关1到n模型的计数更新模型

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

Stack Overflow用户
提问于 2012-01-07 15:32:20
回答 3查看 140关注 0票数 0

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

图书1 <-> n页

我确实想对所有的书(大约300,000本)做一份更新声明。图书模型有一个列interesting_pages_count,需要将所有有趣属性设置为true的页面进行汇总。

这在一份声明中是可能的吗?

谢谢你,马克勒斯

EN

回答 3

Stack Overflow用户

发布于 2012-01-07 17:42:24

至少在PostgreSQL中是有可能的:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2012-01-07 16:01:50

你可以试试

Book.update_all({:field => value}, where_condition)

或者使用普通的SQL查询。

票数 0
EN

Stack Overflow用户

发布于 2012-01-07 16:02:10

好吧,只有一条语句是真正雄心勃勃的,但是如果您在您的Book模型上定义了这个方法:

代码语言:javascript
复制
def count_interesting_pages
  self.pages.inject(0) { |result, page| result += 1 if page.interesting?}
end

然后你就可以这样做:

代码语言:javascript
复制
Book.all.each {|b| b.update_attribute(:interesting_pages, count_interesting_pages)}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8770780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档