お世話になっております。
現在、複数回副問合せを行う複雑なSQLを、ActiveRecordで実現しようとしています。
当初はActiveModelで生SQLを使用していましたが、ActiveRecord依存のGemを使用する
ために、ActiveRecordで書き直しを試みています。
元となる生SQL SELECT * FROM Model1 query1 JOIN (SELECT * FROM Model2 query2 JOIN ( SELECT * FROM Model1 query3 WHERE EXIST(SELECT * FROM Model2 query4 WHERE...(たくさん AND EXIST(SELECT * FROM Model2 query5 WHERE...(たくさん)) ) ) )
実際にActiveRecordに書き換えた所、ModelとService層が非常に煩雑になってしまいました。
特に、副問合せ部分と、Modelをまたがっていることが原因で、可読性が落ちてしまいました。
Service query5 = Model2.scope().scope().scope().scope().scope().scope...to_sql query4 = Model2.scope().scope().scope().scope().scope().scope.where("EXIST( #{query5})")..to_sql query3 = Model1.scope().scope().scope().scope().scope().scope.where("EXIST( #{query4})")..to_sql query2 = Model2.joins("#{query3}").to_sql query1 = Model1.joins("#{query2}").select(column1,column2,,,,)
Model1 scope: scope:...20個ほど Model2 scope: scope:...50個ほど
このような、副問合せを含むような複雑なSQLを書く場合、どのようにすれば可読性を維持できるでしょうか?
当方Rails初心者のため、些細なことでもいいので、ご教示いただきたいです。
よろしくお願いいたします。
RubyOnRails 5.2
Postgresql 10
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/08 02:27