0

私はRailsを初めて使用しますが、SQLの経験があったので、現在、Rails構文で単純なことを行うのに本当に苦労しています。

したがって、2つのテーブルがあります。

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そして、私たちがそれに取り組んでいる間、レールに関する優れた包括的なドキュメントはありますか?たとえば、で使用可能なすべての引数をリストしているものには、includesメソッドがあります。

4

1 に答える 1

0

ActiveRecordクエリインターフェイスガイドを読むことをお勧めします-少し冗長ですが、多くの優れたポインタがあります!網羅的なAPIリファレンスについては、通常http://api.rubyonrails.org/を参照しますが、ActiveRecord::QueryMethods:(ガイドが最善の策です...

クエリを言い換えて、正しいことを確認します。smthのuuidを持つメタデータ行を持たないすべてのワークショップを選択しますか?

ありがたいことに、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 に答える