Rails 和 Active Record:复杂的 SQL 查询

Posted

技术标签:

【中文标题】Rails 和 Active Record:复杂的 SQL 查询【英文标题】:Rails & Active Record: Complex SQL query 【发布时间】:2016-02-15 21:02:23 【问题描述】:

A 有 3 个模型:预告片、电影、发行版。预告片属于_电影,而电影有_many 个版本和has_many 个预告片。

我想渲染每部电影的第一个预告片。

我的方法是在 Trailer.rb 中创建一个范围:

scope :released, -> 
    joins(:movie).
    where("trailers.movie_id = movies.id").
    joins(:release).
    where.not( :release => nil )
  

这样我就可以调用 Trailer.released 但我的查询不起作用,而不是返回一个集合,而是返回一个活动记录关系。

    我的查询哪里出错了? 有没有更有效的方法来做到这一点?

【问题讨论】:

"不是返回一个集合,而是返回一个活动的记录关系。"它们是一样的。 我猜我想说什么。我期待收到 Trailer 对象的输出。但相反,我得到 所以我不知道哪里出了问题 @JacksonCunningham 这很可能意味着您的 SQL 错误。为确保关系有效,请致电first,例如,对其进行处理。它应该吐出对象或错误,说明查询出了什么问题 【参考方案1】:
scope :released, ->  joins(movie: :releases) 

将返回所有预告片,哪些电影已发布。

【讨论】:

哇,这看起来很简单。我会确保它有效然后接受,谢谢!

以上是关于Rails 和 Active Record:复杂的 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

复杂Rails Active Record查询选择具有真实结果的记录,以便当天最新更新其他创建的记录

Rails 中的 Active Record 和 ORM 有啥区别?

脱离rails 使用Active Record

Rails 4 - 从已过滤的 Active Record 查询中删除属性

如何更改 Rails 中 Active Record 的默认时区?

Rails Active Record Query工作日总计离开