SQL クエリの結果を出力するためにactiverecord
andを使用しています。find_by_sql
S = Object.find_by_sql("SELECT * FROM foo")
S.each do |s|
puts "#{s}"
end
私は得る
#<Object:0x0000010214d5e0>
#<Object:0x0000010214ce60>
等...
実際の結果が必要です。
前もって感謝します
マーク
SQL クエリの結果を出力するためにactiverecord
andを使用しています。find_by_sql
S = Object.find_by_sql("SELECT * FROM foo")
S.each do |s|
puts "#{s}"
end
私は得る
#<Object:0x0000010214d5e0>
#<Object:0x0000010214ce60>
等...
実際の結果が必要です。
前もって感謝します
マーク
任意の SQL クエリから生の未処理データだけが必要な場合は、次のように使用する必要がありselect_rows
ます。
SomeModel.connection.select_rows('select * from foo').each do |row|
# `row` is an array of strings at this point
puts row.join(', ')
end
型変換などを自分で整理する必要がありますが、必要に応じて生の SQL と結果を操作できるように、すべての ActiveRecord 機構が邪魔になることがあります。
ActiveRecordfind_by_sql
関数は、クエリが呼び出されたクラスの基になるテーブルから値を返すことを想定しています。たとえば、 (列とFoo
を持つ基になるテーブルを持つ) というクラスがある場合、次のようにすることができます。foos
bar
baz
Foo.find_by_sql("select * from foos").each do |record|
puts "Got a Foo: bar=#{record.bar}, baz=#{record.baz}"
end
オブジェクト ( ) を印刷しようとしたときに得られる出力が気に入らないことが問題である場合は、クラスにメソッドを#<Object:0x0000010214d5e0>
作成するだけで済みます。to_s
class Foo < ActiveRecord::Base
def to_s
"Foo bar=#{record.bar}, baz=#{record.baz}"
end
end
または、オブジェクトを直接印刷せずに ( "#{s}"
)、次を使用しますinspect
。
puts s.inspect
puts
オブジェクトに対して to_s メソッドを呼び出して、ルビ オブジェクトを文字列に変換します。
デフォルトでto_s
は、オブジェクトのクラスとオブジェクト ID のエンコーディングが出力されます。人間が読める形式のオブジェクトの使用を印刷するためinspect
locs = Location.find_by_sql('select * from locations')
Location Load (0.5ms) select * from locations
locs.each do |l|
# it calls to_s method on object
puts l
end
#<Location:0x000000055bb328>
#<Location:0x000000055bb058>
locs.each do |l|
puts l.inspect # prints actual object
end
#<Location id: 15, name: "Annettaside3", street: "71838 Ritchie Cape", city: "East Destanystad", state: "Utah", zip: "58054", phone: 123456, other_phone: 987654, staff_strength: 40, is_active: true, created_at: "2012-01-25 11:17:26", updated_at: "2012-01-25 11:17:26", country_name: "Korea">
#<Location id: 16, name: "Sporerbury4", street: "73057 Jerad Shoal", city: "South Kyliefurt", state: "Delaware", zip: "46553-3376", phone: 123456, other_phone: 987654, staff_strength: 40, is_active: true, created_at: "2012-01-25 11:24:48", updated_at: "2012-01-25 11:24:48", country_name: "Australia">
to_s
そのオブジェクトのメソッドはありません。puts s.inspect
またはp s
代わりに試すことができます