1

私はfind_by_sqlを使用して、find_by_sqlを呼び出すために使用されたモデルよりもいくつかの余分な列を持つ2つのテーブルのUNIONを取得しました。

例えば:

class Shape < ActiveRecord::Base
   # columns
   # shape_id -> Integer
end

class Circle < ActiveRecord::Base
   # columns
   # circle_id -> Integer
   # created_at -> Datetime 
   # update_at -> Datetime 
end

class Square < ActiveRecord::Base
   # columns
   # square_id -> Integer
   # created_at -> Datetime 
   # update_at -> Datetime 
end

次のような Shape モデルを使用して、円と正方形の UNION を取得しました。

@shapes = Shape.find_by_sql("select circle_id as id, created_at, updated_at from circles UNION select square_id as id, created_at, updated_at from squares")

ここで、@shapes を使用してすべてのレコードを created_at と updated_at で表示すると、次のように常に文字列オブジェクトで返されます。

for shape in @shapes
  puts shape['id'].class.inspect # String
  puts shape['created_at'].class.inspect # String
  puts shape['updated_at'].class.inspect # String
end

さて、次のようにデータベースで定義された型のオブジェクトとしてすべての値を取得できる最良の方法は何ですか:

for shape in @shapes
  puts shape['id'].class.inspect # Integer
  puts shape['created_at'].class.inspect # DateTime
  puts shape['updated_at'].class.inspect # DateTime
end
4

0 に答える 0