ver.2橋本亮介の個人ブログ。having節でエラーコメントを残すやりたかったのは人物の検索結果を出すことです。検索条件として、例えば男性で、東京在住であるというような、その人物の「属性」でand検索するというものになります。having節を使っていた部分が、postgresqlに変更してからエラーがでたということが発端になります。functionというエラーがでて、目的のことをやるには一旦select文を分割せねばならないようでした。SQLを直接書けばそれ自体は難しくないのですが、なんとかArelをできるだけ活用してできないものかと試行錯誤しました。ハードルはどのようにサブクエリをarelで組み立てるのかということ。この問題に関してはこちらの記事が参考になりました。クラスにたいしarel_tableメソッドでArel::Tableクラスのインスタンスを取り出します。※pattributes_peopleテーブルに対しPattributePersonクラスです。ような属性のIDが入った配列です。AND検索なのでinにしたいところですが、ここでは一旦in_anyで該当する行をすべて取り出しておきます。sub[:pattribute_id].in_any(pattributes)最後にサブクエリの本体となるArel::SelectManagerクラスのインスタンスを取り出します。#{pattributes.length}”)→pattribute_idがpattributeのリストに一致するものすべてを取り出しておいて、person_idが重複しないように圧縮します。そのときperson_idがpattributesの数分だけあるもののみ取り出しています。pattributeが全部該当した者=ANDと同じ。これを他のArel::Tableでくっつけてひとつの条件(Arel::Attributes::Attributeクラスのインスタンス)を作成します。person_table[:id].in(select_manager)あとはこのままpeopleとして取得するなり、他の条件と結合するなりできます。Person.includes(:user)@result.where(attr2)group節がサブクエリになったことでエラーは出なくなりました。Facebookページとは?を説明するときに自分なりの回答を考えてみた。コメントをキャンセルメールアドレスが公開されることはありません。*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。衝撃はゲーマーにゲームをやめさせる力があるあーやっちまった。