ActiveRecord::Relation のオブジェクトから生データ(FixnumクラスやStringクラスのオブジェクト)を取り出す方法

結論

以下の順序に沿っていきます。説明を分かりやすくするため*1、一部で正確ではない表現を使っています。

1. 「モデル」オブジェクトの形でレコードを取得する

以下のようにしてItemモデルの形でレコードを取得したとします。

result_records = Item.order(
  'order_number',
).limit(10)

2. 取得したレコードを「バラす」

「1.」で取得したresult_recordsActiveRecord::Relationのオブジェクトです。まだオブジェクトの「かたまり」の状態なので、以下のようにしてバラします。バラしたオブジェクトに対して施すメソッドはまだ書いていません。

result_records.each do |result_record|
  # ここに result_record に対して行う処理を書く
end

3. バラしたオブジェクトから値を取得する

「2.」のresult_recordに対して.foobarというメソッドを実行することでfoobarカラムの生の値を取得することができます。以下がコード例です。

result_records.each do |result_record|
  puts result_record.foobar
end

補足

以前の記事において「attributes メソッド」を用いるとよい、と書きましたが、確かにそれでもいいのですが、やや冗長になります*2

また、ActiveRecord::Relationオブジェクトに対してto_aメソッドを実行して配列に変換し、その配列の個々の要素に対して「3.」のように実行しても同じ結果になります。

*1:分かりやすくなっているだろうか……

*2:しかし直感的に理解はしやすいかなと思います

Powered by はてなブログ