以编程方式获取 Rails 4 中的 belongs_to 关联的类

Posted

技术标签:

【中文标题】以编程方式获取 Rails 4 中的 belongs_to 关联的类【英文标题】:Programatically get the class of the belongs_to association in Rails 4 【发布时间】:2013-11-16 10:20:07 【问题描述】:

假设我有一些通过一对多关系链接的类:

class A
  field :name, type: String
  has_many :b

class B
  field :title, type: String 
  belongs_to :a

假设我有一个 B 的实例,我想检索他的 belongs_to 关系的类名(在我的示例中是“A”,而不是链接到我的 B 对象的类型 A 的实例)。

a = A.new name: 'my A object'
b = B.new title: 'my B object', a: a

assert_equal b.get_relationships(:belongs_to), ['A'] #substitute "get_relationships" with something that actually exists :)

我该怎么办?

我在类似的主题(使用反射)上查看了这个answer,但我无法让它工作。也许 Rails 4 发生了一些变化?

【问题讨论】:

B.reflect_on_all_associations(:belongs_to).map(&:name) 【参考方案1】:
B.reflect_on_all_associations(:belongs_to).map(&:name)

b.class.reflect_on_all_associations(:belongs_to).map(&:name)

【讨论】:

您应该使用:class_name 代替class_name 选项,例如belongs_to :author, class_name: 'User' 如果有多个类与您的 b 对象具有 has_many 关联怎么办?

以上是关于以编程方式获取 Rails 4 中的 belongs_to 关联的类的主要内容,如果未能解决你的问题,请参考以下文章

回调belongs_to关联rails

如何测试 belongs_to 与 Rails 6 和 RSpec 4.1 的关联?

如何在rails 4中创建新的belongs_to关联模型

Rails 3 中的Belongs_to 关联缓慢

Rails:如何访问视图中的belongs_to字段?

Rails 使用同一命名空间中的模型作为 belongs_to 引用,如何从外部引用模型