如何检查 ActiveRecord inverse_of 检测是否有效?

How to check if ActiveRecord inverse_of detection worked?

根据documentation for ActiveRecord::Associations::ClassMethods,ActiveRecord 可以自动确定一个模块的belongs_to 关联是否与另一个模型的has_onehas_many 关联相反。

但是,我想确保此检测在某些我不确定的关联上确实成功(例如,我有一个 belongs_to 与其他模型的名称不完全匹配,但class_name套)。有没有办法检查 inverse_of 检测是否应用于特定关联?理想情况下,我会在项目的测试套件中添加一些东西,以确保关联是预期的双向。

启动 rails 控制台,然后 运行:

> Rails.application.eager_load!

> ActiveRecord::Base.descendants.each {|m| puts "=== #{m} ==="; m.reflect_on_all_associations.each {|a| puts "#{a.name} => #{a.has_inverse?}"}}

它将转储一个列表,其中包含您的所有模型、它们的关联以及它们的逆函数(如果已知),否则 'false'、nil 或空字符串(基于未知的原因。)