ここには 2 つの質問があると思います。両方に答えるために最善を尽くします。まず、Rails アプリケーション内のすべてのモデルを一覧表示する方法が必要です。この質問にはいくつかの方法があり、私はこの回答を好みます( by sj26 )。
# Really depends on how your classes are loaded, usually environment specific.
Rails.application.eager_load!
ActiveRecord::Base.descendants
その後、モデルの関連付けを解析して :as @option が割り当てられているかどうかを判断し、関連付けられているクラス名を引き出す必要があります。これは、関連付けが次のように作成されていることを前提としています。
class Mentionee < ActiveRecord::Base
has_many :mentions, :as => :mentionable, :dependent => :destroy, :class_name => 'Mentionable'
end
これは、 reflect_on_all_associationsメソッドを使用して行うことができます(これを記述するには、おそらくより Ruby 風の方法があります)。
Mentionee.reflect_on_all_associations.select {|a| a.options[:as] == :mentionable }
Mentionable のポリモーフィック クラス モデルを返します。これらを結合するには、次のようにします (テストされていません!)。
Rails.application.eager_load!
mentionables = []
ActiveRecord::Base.descendants.each do |descendent|
mentionables << descendent.reflect_on_all_associations.select{|a| a.options[:as] == :mentionable}
end
mentionables.each do |mentionable|
# Do your work here
end