Rails:查找实例的关系名称

Rails: find the relationship name of an instance

假设我们有这样的关系:

class Company < ActiveRecord::Base
  has_one :company_address, class_name: 'Address', foreign_key: 'company_address_id'
  has_one :overseas_address, class_name: 'Address', foreign_key: 'overseas_address_id'
end

如果我 prynew 地址实例中,是否可以 return :company_address:overseas_address

字段相同,但我想做不同的验证。

是的,有其他解决问题的方法,但我更感兴趣的是是否真的可以找到关系的名称。

谢谢!

你应该有相应的 belong_to: 在你的地址模型中,然后尝试 Address.reflect_on_all_associations(belongs_to) 它将 return 一个 ActiveRecord::Reflection::AssociationReflection 的集合,其中会有不同的 name(取决于你的 belong_to)

为了检查实例,您应该将 belong_to 标记为 inverse_of: :put_corresponding_association,将 has_one 标记为 inverse_of belong_to,然后您可以检查对应的方法(由 belong_tos 生成)存在父公司对象

这个想法是假设地址为

class Address < ActiveRecord::Base
  belongs_to :company, class_name: 'Company', foreign_key: 'company_address_id', inverse_of: :company_address
  belongs_to :oversea, class_name: 'Company', foreign_key: 'overseas_address_id', inverse_of: :overseas_address
end

class Company < ActiveRecord::Base
  has_one :company_address, class_name: 'Address', foreign_key: 'company_address_id', inverse_of: :company
  has_one :overseas_address, class_name: 'Address', foreign_key: 'overseas_address_id', inverse_of: :oversea
end

并且您将地址创建为 address = company.overseas_address.new

然后

address.company == nil
address.oversea == company