我有三个模特
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
答案 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
。