rails方法获取模型的关联名称

时间:2010-01-07 22:36:25

标签: ruby-on-rails activerecord

有没有办法找出模型的关联?拿这两个型号:

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']

2 个答案:

答案 0 :(得分:70)

您正在寻找reflect_on_all_associations

简而言之:

Post.reflect_on_all_associations(:has_many)

...将为所有name个关联提供一个数组(具有has_many等属性的对象)。

答案 1 :(得分:0)

以下将列出特定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