【问题标题】:rails fetch records with no has many relationship and ones with a conditionrails 获取没有关系的记录和有条件的记录
【发布时间】:2016-02-16 10:05:19
【问题描述】:

我有一个HomeMakerPerDateUnavailability 模型。 HomeMaker has_many per_date_unavailabilities。我希望所有在 per_date_unavailabilities 中没有记录的家庭主妇和有记录但在per_date_unavailabilties.unavailable_date = somedate 时没有记录的家庭主妇

当我希望 HomeMakers 没有 PerDateUnavailability 记录时,我通常会使用HomeMaker.includes(:per_date_unavailabilities).where(per_date_unavailabilities: {id: nil}) 进行第一部分

条件的第二部分使用HomeMaker.joins(:per_date_unavailabilities).where.not(per_date_unavailabilities: {unavailable_date: Date.today})

如何混合这些?

【问题讨论】:

  • 你为什么不能把他们锁起来HomeMaker.joins(:per_date_unavailabilities).where.not(per_date_unavailabilities: {unavailable_date: Date.today}).where(per_date_unavailabilities: {id: nil})

标签: ruby-on-rails postgresql rails-activerecord


【解决方案1】:

你需要的sql有点像这样:

select a.*
  from home_makers a left join per_date_unavailabilities b
  on a.id = b.home_maker_id
  where b.home_maker_id is NULL
  or b.unavailable_date IS NOT ?;

在 ActiveRecord 中表达or 子句有点困难,最好我们不反对它。 (在OP的评论后编辑)

HomeMaker.joins("LEFT JOIN per_date_unavailabilities on per_date_unavailabilities.home_maker_id = home_makers.id")
.where("per_date_unavailabilities.home_maker_id IS NULL OR per_date_unavailabilities.unavailable_date != ?", somedate)

【讨论】:

  • 这终于奏效了。 HomeMaker.joins("LEFT JOIN per_date_unavailabilities on per_date_unavailabilities.home_maker_id = home_makers.id").where("per_date_unavailabilities.home_maker_id IS NULL OR per_date_unavailabilities.unavailable_date != ?", some_date) 。感谢您为我指明正确的方向:)
猜你喜欢
  • 1970-01-01
  • 2015-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多