Delegated Type == Polymorphic Relation + 便利メソッドたち

Published: 2023/3/29


Rails 6.1 から Delegated Type が導入された。 これの正体は、 Polymorphic Relation に諸々の便利メソッドを生やすだけのものであったので、その備忘録。

DelegatedType の実装

上記が、現行の Delegated Type の実装であって、コードを抜粋すると以下の通りになっている。

def delegated_type(role, types:, **options)
  belongs_to role, options.delete(:scope), **options.merge(polymorphic: true)
  define_delegated_type_methods role, types: types, options: options
end

define_delegated_type_methods は、与えられた引数を元に、 scope 定義と define_method をしているだけのヘルパー的な関数である。 よって、 Delegated Type でできることは、基本的には Polymorphic Relation でできたことと同義であって、 boilerplate なコードが減っただけ、というのが実態である。


Tags: rails

関連記事