環境
- Ruby on Rails 6.1.0
WhereClause.to_h()
Hoge
とFuga
というふたつのActiveRecordモデルクラスがあるとして、Fuga
の適当なIDでHoge
レコードを取ってくるようなメソッドがあるとします。
def super_heavy_method()
subquery = Fuga.first
return Hoge.where(fuga: subquery)
end
このとき何らかの理由でsuper_heavy_method()
の中身を触らずに、その返り値であるHoge
のRelationオブジェクトからsubquery
内部にあるFuga
のIDを取り出したいとします。
一度組み立てたActiveRecord Relationオブジェクトには、クエリの中身を取り扱うメソッドがいくつか用意されています。where_clause()
というメソッドでWhereClauseオブジェクトが取得でき、その名の通りWhere句の条件をオブジェクトとして取得できます。to_h()
でハッシュとして取り出すことができます。
query = super_heavy_method()
query.where_clause.to_h() #=> {"fuga_id"=>1}