PolymorphicなTableに無関係なモデルからhas_one Associationを定義する

analysesテーブルにanalyzable_idanalyzable_typeという項目があって、
analyzable_typeには、'Event'と'Spot'という値が入っている。
hasする側からは↓と定義すれば、@event.analysisというふうに呼べる。

class Event < ActiveRecord::Base
  has_one  :analysis, as: :analyzable
end

今回は訳あって、NewEventというモデルから、analysisテーブルの'Event'へhas_one関連を定義したくなったとする。

class NewEvent < ActiveRecord::Base
  has_one  :analysis, -> { where(analyzable_type: 'Event') }, foreign_key: :analyzable_id
end

でできる。

まとめ

さばげぶおもしろい。