1

次のモデルがあるとします。

class Foo < ActiveRecord::Base
    belongs_to :bar
end

class Bar < ActiveRecord::Base
    belongs_to :a
    belongs_to :b
end

Foosを含めBar、 および でグループ化したa_idすべての を検索したいb_id

次のクエリが機能すると確信しています。

Foo.joins(:bar).group('bar.a_id, bar.b_id').all

グループステートメントにSQLを書かずにそれを行う方法があるかどうか疑問に思っていますか?

サブ質問

このクエリ スタイルは何と呼ばれ、その完全なドキュメントはどこで読むことができますか? Rails クエリ ガイドにはいくつかのスタイルが混在しており、それらの詳細については触れていません。

4

1 に答える 1

1

スタイルの組み合わせは、ハッシュを使用するスタイルが現在、考えられるすべてのSQLクエリを記述できるわけではないためです。したがって、文字列を使用することには常にフォールバックがあります。

指定したクエリは機能しますが、文字列は非常に標準的なSQLであり、別のデータベースが使用されても失敗しないため、使用しない理由はありません。

ただし、文字列なしで書き込むことは可能です。

デフォルトではFooのすべてのフィールドが選択されているため、現在のクエリではエラーがスローされることに注意してください。ただし、groupでは、集計関数またはgroupby列のみを選択できます。

クエリは次のようになります。

Foo.select("COUNT(*) as count").joins(:bar).group([:bar => :a_id, :bar => :b_id])

集計関数のみが選択されるように、select句を追加しました。

于 2012-08-14T07:52:27.157 に答える