モデルがどのような関連を持っているかを知る方法はありますか?これらの2つのモデルを取ります:
class Comment < ActiveRecord::Base
belongs_to :commentable
end
class Post < ActiveRecord::Base
has_many :comments
belongs_to :user
end
私は次のようなものを探しています:
Post.has_many #=> ['comments', ...]
Post.belongs_to # => ['user']
Comment.belongs_to # => ['commentable']
あなたが探している reflect_on_all_associations
。
つまり、要するに:
Post.reflect_on_all_associations(:has_many)
...すべてのhas_many
アソシエーションの(name
などの属性を持つオブジェクトの)配列を提供します。
以下に、Postの特定のインスタンスのすべての関連付けを示します。
#app/models/post.rb
def list_associations
associations = []
User.reflect_on_all_associations.map(&:name).each do |assoc|
association = send assoc
associations << association if association.present?
end
associations
end