ActiveRecordでオブジェクトを作成しないSelect

ActiveRecordでオブジェクトを作成しないSelect。
オーバーヘッドが少ないので、オブジェクトが必要ない場合はパフォーマンスが向上する。

select_value は最初の一件を返す。
値は文字列で返される。

>> ActiveRecord::Base.connection.select_value('SELECT zip_code FROM addresses')
=> "1000000"

select_valuesは配列で返す。
値は文字列で返される。

>> ActiveRecord::Base.connection.select_values('SELECT zip_code FROM addresses LIMIT 3')
=> ["1000000", "1020072", "1020082"]

実践 Rails -強力なWebアプリケーションをすばやく構築するテクニック』に紹介されていた方法。
メソッドを一つ追加して、select_valuesを使いやすくする。

class << ActiveRecord::Base
  def select_values(sql)
    connection.select_values(sanitize_sql(sql))
  end
end

sql = %(SELECT id FROM people WHERE last_name = ?)
last_name = %(O'Reilly)
Person.select_values [sql, last_name] #=> ["12", "42"]

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください