8

我想在运行时找到 ActiveRecord 类的关联...

假设我有以下内容:

class Person < ActiveRecord::Base
  has_many :chairs
  has_many :pens
end

class Chair < ActiveRecord::Base
  belongs_to :person
end

class Pen < ActiveRecord::Base
  belongs_to :person
end

我如何在运行时发现 Person “有很多”椅子和钢笔,反之亦然?我正在寻找一种可以返回字符串数组的方法(如果存在这样的方法)。IE

Person.has_many_assocations 

会返回:

["chairs", "pens"] 

Pen.belongs_to_associations

会返回:

["person"]

我错过了这样的方法吗?

谢谢你的帮助。

4

2 回答 2

26

我认为ActiveRecord::Reflection类可能是您正在寻找的。从文档中:

  Account.reflect_on_all_associations             # returns an array of all associations
  Account.reflect_on_all_associations(:has_many)  # returns an array of all has_many associations
于 2009-03-13T21:49:33.933 回答
0

听起来在运行时做一件很愚蠢的事情。你到底想达到什么目的?我认为无论您的问题是什么,都有一个简单且更常用的解决方案。

如果必须,我会使用TheModel.read_inheritable_attribute(:reflections).

于 2009-03-13T22:07:11.380 回答