如何在 Rails 中使用查询进行简单连接
Posted
技术标签:
【中文标题】如何在 Rails 中使用查询进行简单连接【英文标题】:How to make a simple join with query in rails 【发布时间】:2013-01-28 05:35:07 【问题描述】:我是 Rails 的新手,但我对 sql 有一些经验,所以现在我真的很难用 Rails 语法做一个简单的事情。
所以,有两个表:
class WorkshopMetadata < ActiveRecord::Base
attr_accessible :uuid, :action
belongs_to :workshop
end
class Workshop < ActiveRecord::Base
has_many :workshop_metadatas
end
而我想做的查询是:
SELECT workshops.*
FROM workshops LEFT JOIN
(SELECT workshop_metadatas.workshop_id as id, workshop_metadatas.uuid
FROM workshop_metadatas WHERE uuid = 'smth') as metadatas
WHERE uuid IS NULL
我知道要进行左连接,您必须使用包含,但是我如何包含查询,而不是表?我对此完全感到困惑。
谢谢!
附:在我们研究的同时,是否有任何好的和全面的 Rails 文档?例如,列出包含方法的所有可用参数的那个。
【问题讨论】:
【参考方案1】:我建议通读the ActiveRecord query interface guide - 它有点冗长,但它有很多很棒的指针!对于详尽的 API 参考,我通常会将您指向 http://api.rubyonrails.org/,但对于 ActiveRecord::QueryMethods
来说,它非常简单:(该指南是最好的选择...
让我重新表述您的查询以确保我的查询正确:您要选择所有没有元数据行的 uuid 为 smth 的研讨会?
值得庆幸的是,rails 允许您下拉查询片段,因此您应该可以通过以下方式完成:
Workshop.joins(
'LEFT JOIN workshop_metadatas ON workshop_metadatas.workshop_id = workshops.id'
).where('uuid IS NULL')
(在没有子查询的情况下,这不是表达同样的事情吗?如果不是:您应该能够将您的子查询传递给joins
调用)
【讨论】:
是的,这与我想要的非常接近。但是有没有什么方法可以在不使用plainsql的情况下使用rails原生工具来完成这个子查询? 看看***.com/questions/5483407/subqueries-in-activerecord 这个答案准确地展示了如何包含子查询:***.com/a/21557060以上是关于如何在 Rails 中使用查询进行简单连接的主要内容,如果未能解决你的问题,请参考以下文章