【发布时间】:2012-02-16 15:35:01
【问题描述】:
我有这组表(我正在使用 postgresql)
User (with id, first_name, ....)
Assignment (with id, name, start_date, finish_date,....)
AssignmentUser(with assignment_id, user_id, flag_status)
flag_status 是一个布尔值,表示用户是否仍在分配中。
假设user1申请assignment1、assignment2、assignment3如下:
start_date finish_date flag_status
user1 assignment1 11-11-11 11-12-11 false
user1 assignment2 01-10-11 01-02-12 true
user1 assignment3 01-01-12 01-03-12 true
假设我想在 TODAY 搜索用户作业的最接近 start_date。
我已经在我的用户模型中做到了:
def last_date
self.assignments.where("date < ?", Date.today).max.try(:date)
end
还有这个
def last_status
AssignmentUser.find_by_assignment_id_and_user_id(Assignment.find_by_date(self.last_date), self.id).flag_status if self.last_date.present?
end
在我看来,每个用户:
User.all.each do |u|
<td> u.first_name </td>
<td> u.last_date </td>
<td> u.last_status </td>
end
效果很好,但是在我的日志中,我看到每个用户有 3 个查询(如预期的那样)。 所以我的问题是:如何避免这些多个查询? (我想这更像是一个 SQL 问题而不是 Rails 问题)
【问题讨论】:
标签: sql ruby-on-rails ruby-on-rails-3 postgresql ruby-on-rails-3.1