【发布时间】:2016-12-25 21:05:04
【问题描述】:
rails 模型中的数据库关系:
Class User < ActiveRecord::Base
has_many :user_messages
has_many :messages
end
Class UserMessage < ActiveRecord::Base
belongs_to :user
belongs_to :message
end
Class Message < ActiveRecord::Base
belongs_to :user
has_many :user_messages
end
我要优化以下代码:
ids.each do |id|
user = User.find_by_id(id)
unread_count = user.user_messages.where(:folder => user.inbox_id, :read => false).count
puts "UserID #{id} ---- Unread Message count #{unread_count}"
end
能否告诉我如何使用 Active Record 或 SQL Query 优化上述代码。我基本上是想减少数据库查询和上述代码完成循环所需的时间。
提前致谢。
【问题讨论】:
-
听起来像是一个左连接的工作,与一个 group by 和 count。您是否尝试过为 sql 做一个基础教程?
-
您应该在
users表中存储一个unread_count列,以便为每个用户存储unread_count。 -
我可以将 unread_count 存储在 users 表中,因为我使用此 Model.import 方法在 user_messages 表中插入了批量数据。
标签: mysql sql ruby-on-rails postgresql