【问题标题】:Rails How to use join in this specific situation?Rails 在这种特定情况下如何使用join?
【发布时间】:2012-09-13 13:15:00
【问题描述】:

我有三个模型,每个模型都是这样连接的:Groups 有很多 Students 有很多 Absences

Absences 有一个名为 created_on 的字段。

我只有一个group id,并希望获得今天所有缺席学生

我在Student 模型中创建了这个方法:

# Inside student.rb

def self.absent_today_in_group (group)
 #SQLITE
 find(:all, :joins => :absences, :conditions => ["STRFTIME('%d', created_on) = ? AND STRFTIME('%m', created_on) = ?", Date.today.day, Date.today.month])

 #POSTGRES
 #find(:all, :joins => :absences, :conditions => ["EXTRACT(DAY FROM created_on) = ? AND EXTRACT(MONTH FROM created_on) = ?", Date.today.day, Date.today.month])
end

为什么该查询不会返回任何内容?然后我怎么能检查 group_id?

【问题讨论】:

  • 关于生成的 SQL 查询,日志告诉你什么?

标签: ruby-on-rails activerecord join


【解决方案1】:

您使用的是什么版本的导轨?您可以在 rails 3 中执行此操作:

def self.absent_today_in_group(group)
  joins(:absences, :group).where(
    'absences.created_on' => (Time.now.beginning_of_day..Time.now.end_of_day),
    'groups.id' => group.id
  )
end

这将找到给定组今天缺席的所有用户。

【讨论】:

  • 谢谢!我正在使用 Rails3,这现在可以在 SQlite 的开发中使用,它是否适用于 PostGres(在 heroku 上)?
  • 顺便说一句,将您的开发环境与您的生产环境相匹配(如果可能)始终是一种很好的做法。因此,最好在本地机器上安装 postgres 并使用它进行开发。
  • 是的,我同意。感谢您的帮助!
【解决方案2】:

这应该是 :where 而不是 :conditions 吗?

【讨论】:

  • 是的..我的错,对不起!!我通常使用方法语法,然后使用它的 .where([...])
猜你喜欢
  • 2015-04-07
  • 1970-01-01
  • 2020-10-15
  • 1970-01-01
  • 2023-02-18
  • 1970-01-01
  • 2022-01-23
  • 2015-11-30
  • 2017-05-16
相关资源
最近更新 更多