0

我对 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

我知道要进行左连接,您必须使用包含,但是我如何包含查询,而不是表?我对此完全感到困惑。

谢谢!

PS 当我们在做的时候,是否有任何好的和全面的 Rails 文档?例如,列出所有可用参数的方法包括方法。

4

1 回答 1

0

我建议阅读ActiveRecord 查询界面指南——它有点冗长,但它有很多很棒的指针!对于详尽的 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调用)

于 2013-01-28T06:58:13.943 回答