如何检查 ActiveRecord inverse_of 检测是否有效?
How to check if ActiveRecord inverse_of detection worked?
根据documentation for ActiveRecord::Associations::ClassMethods,ActiveRecord 可以自动确定一个模块的belongs_to
关联是否与另一个模型的has_one
或has_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 或空字符串(基于未知的原因。)
根据documentation for ActiveRecord::Associations::ClassMethods,ActiveRecord 可以自动确定一个模块的belongs_to
关联是否与另一个模型的has_one
或has_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 或空字符串(基于未知的原因。)