LoginSignup
0
0

Rails で、生 SQL を発行した時に、 Active Record と同様にアクセスできるようにする

Posted at

概要

rails で生 SQL を発行した場合は各フィールドをキーにした hash が返ってきます。そのため、各フィールドにアクセスするためには r['id'] のようにアクセスする事になります。
ActiveRecord のメソッド (r = Foo.first 等) を使用した場合は r.id とアクセスできます。
同じプロジェクト内のソースでアクセス方法に違いがあると、混乱するかもしれません。生 SQL を発行した場合でも ActiveRecord のメソッドと同じ方法でアクセスできるようにしておいた方が良いと思いました。

方法

Struct を使用します。

実例

class RawSelect

  def self.execute_select
    sql = 'SELECT id, name, age FROM emp'
    ActiveRecord::Base.connection.select_all(sql).map do |r|
      EmpInfo.new(
        r['id'],
        r['name'],
        r['age']
      )
    end
  end

  private

  EmpInfo = Struct.new(
    :id,
    :name,
    :age
  )

end
RawSelect.execute_select.each do |r|
  p r.id
  p r.name
  p r.age
end

参考

OpenStruct を使用すれば、手軽に同じ事が実現できますが、 3.0 から非推奨です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0