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 4 - 从已过滤的 Active Record 查询中删除属性