尝试在rails应用中构建新对象时遇到ActiveRecord::HasManyThroughCantAssociateThroughHasOneOrManyReflection
错误。它不符合我所见过的任何标准错误,也无法通过inverse_of
关联修复。
我认为我需要运行一个回调来帮助完成这项工作 - 任何人都可以帮助解决以下问题:
def PhoneNumber do
belongs_to :key_contact
end
def KeyContact do
has_many :phone_numbers
has_many :sale_contacts
end
def SaleContact do
belongs_to :key_contact
belongs_to :sales_opportunity
has_many :phone_numbers, through: :key_contact
accepts_nested_attributes_for :phone_numbers
end
正如您所看到的,SaleContact是key_contacts和sales_opportunities相遇的联接表 - 基本上我选择现有的key_contacts并在sales_opportunity页面上显示它们,其中包含一些额外的详细信息(角色,偏好等等) - 我' ve为简洁起见,将其排除在外。)
添加新的sale_contact时,我希望为用户提供同时添加phone_numbers的功能。这会引发我的activerecord错误。
我的SaleContact控制器:
def new
@sale_contact = SaleContact.new
@phone_number = @sale_contact.phone_numbers.build
end
这可以在输入表单上显示fields_for phone_number,并通过params哈希传递正确的属性以添加新的phone_number,但是当我收到错误时就是这样:
ActiveRecord::HasManyThroughCantAssociateThroughHasOneOrManyReflection (Cannot modify association 'SaleContact#phone_numbers' because the source reflection class 'PhoneNumber' is associated to 'KeyContact' via :has_many.):
从我所看到的:
因此我想创建一个回调来从sale_contact哈希中去掉phone_number_attributes,销毁新构建的phone_number和所有关联,然后通过将phone_numbers_attributes传递给PhoneNumber.new(phone_number_attributes)动作并保存为单独的交易。那会有用吗?
答案 0 :(得分:0)
您可以尝试这样做:
delegate :phone_numbers, to: :key_contact