web-dev-qa-db-ja.com

railsモデルの関連付け名を取得するメソッド

モデルがどのような関連を持っているかを知る方法はありますか?これらの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']
33
DiegoSalazar

あなたが探している reflect_on_all_associations

つまり、要するに:

Post.reflect_on_all_associations(:has_many)

...すべてのhas_manyアソシエーションの(nameなどの属性を持つオブジェクトの)配列を提供します。

71
rfunduk

以下に、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
0
Obromios