私は次のSTIセットアップを持っています:
class Cage < ActiveRecord::Base
has_many :animals
end
class Animal < ActiveRecord::Base
belongs_to :cage
end
class Cat < Animal
# name = "Tom"
end
class Mouse < Animal
# name = "Jerry"
end
次の構造を返すAnimalsテーブルでselectを実行したいと思います。
+----+-----------------------+
| ID | cat_name | mouse_name |
+----+-----------------------+
| 1 | Tom | Jerry |
+----+-----------------------+
理想的には、次のようなものが欲しいです。
Cage \
.joins(:animals)
.select("
cages.id,
animals.name as case animals.type
when 'Mouse' then mouse_name
when 'Cat' then cat_name end
") \
.group('cages.id')
しかし、それは機能しないので、私はこれを行いました:
Cage \
.joins(:animals)
.select("
cages.id,
case animals.type when 'Mouse' then animals.name end mouse_name end,
case animals.type when 'Cat' then animals.name cat_name end
") \
.group('cages.id')
最初のクエリを機能させる方法はありますか?そうでない場合は、2番目のクエリを作成するためのより良い/代替の方法がありますか?