Rails - 从has_many =>获取名称通过关联作为字符串

时间:2015-07-10 21:19:33

标签: ruby-on-rails ruby activerecord

我有三个模特

class Mar < ActiveRecord::Base
  belongs_to :baz
  belongs_to :koo
end

class Baz < ActiveRecord::Base
  has_many :other_mars, :class_name => "Mar", :foreign_key => :b
end

class Koo < ActiveRecord::Base
  has_many :mars
  has_many :bazs, :through => :mars, :source => :baz
end

从模型Baz我想将has_many名称作为字符串。在这个例子中,它是&#34; other_mars&#34;

解决方案必须适用于传递给它的class_name的任何类似的has_many关系。

我正在使用Rails 3.2和ruby 1.9

2 个答案:

答案 0 :(得分:1)

  

我想将has_many名称作为字符串。在这个例子中,它是&#34; other_mars&#34;

如果您要查找的是模型的相关关联,在您的情况下Baz打开项目目录中的rails控制台并输入:

Baz.reflect_on_all_associations(:has_many)

这将返回一个ActiveRecord对象,其中包含属性@name下的关联列表。

因此,可以通过键入

来获取字符串关联的名称
Baz.reflect_on_all_associations(:has_many).name.to_s

答案 1 :(得分:1)

如果我理解您的要求,以下代码有帮助

result = Baz.reflect_on_all_associations.collect do |association|
  association.name.to_s if association.options[:class_name].present?
end.compact

在您的情况下,上面的代码会显示['other_mars']。即它返回用associations键声明的所有:class_name