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"]