метод rails для получения имени ассоциации модели - PullRequest
31 голосов
/ 08 января 2010

Есть ли способ узнать, какие ассоциации имеет модель? Возьмите эти 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']

Ответы [ 2 ]

70 голосов
/ 08 января 2010

Вы ищете reflect_on_all_associations.

Итак, вкратце:

Post.reflect_on_all_associations(:has_many)

... даст массив (объекта с атрибутами, такими как name и т. Д.) Всех has_many ассоциаций.

0 голосов
/ 08 ноября 2018

Ниже приведен список всех ассоциаций для конкретного экземпляра 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...