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

Den*_*ton 4 activerecord ruby-on-rails associations

根据ActiveRecord :: Associations :: ClassMethods文档,ActiveRecord可以自动确定belongs_to一个模块的关联是否是另一个模型的关联has_one或者has_many是另一个模型的关联.

但是,我想确保这个检测实际上成功地解决了一些我不确定的关联(例如,我有一个belongs_to与其他模型名称不完全匹配但已class_name设置的关联).有没有办法检查inverse_of检测是否应用于特定关联?理想情况下,我会在项目的测试套件中添加一些内容,以确保关联是双向的.

The*_*ter 7

启动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?}"}}
Run Code Online (Sandbox Code Playgroud)

它将转储包含所有模型的列表,它们的关联以及是否已知它们的反转,否则为"false",nil或空字符串(基于它未知的原因).

  • 请注意,这不会检查反向关联是否已实际定义。您可以执行 `a.inverse_of&.name` 来仅显示在其他模型上正确定义的名称。 (2认同)