我有这种情况。
class StoreSubscriptionProduct << ApplicationRecord
end
class SpecialProduct < StoreSubscriptionProduct
has_many :special_product_item_groups
has_many :item_groups, through: :special_product_item_groups
end
class ItemGroup << ApplicationRecord
has_many :special_product_item_groups
has_many :special_products, through: :special_product_item_groups
end
class SpecialProductItemGroup < ApplicationRecord
# special_product_id
# item_group_id
belongs_to :special_product
belongs_to :item_group
end
控制器:
class SpecialProductsController < BaseController
def create
special_product = SpecialProduct.new(permitted_params)
if special_product.save
# blah
else
# blah
end
end
end
我当前的问题是在我的控制器上我收到了用于创建SpecialProduct的params并通过params发送item_group_ids。
创建联接表时,记录special_product_id
其nil
在验证中,item_group_id
没问题,但未分配special_product_id
。
=> #<SpecialProductItemGroup:0x007fdb3c4905b0
id: nil,
special_product_id: nil,
item_group_id: 1,
created_at: nil,
updated_at: nil>
我错过了一些foreign_key或其他选项,以便分配special_product_id
提前致谢。
答案 0 :(得分:0)
我假设您的STI表格为item_groups
,其中您创建了type
列:
class SpecialProduct < StoreSubscriptionProduct
has_many :special_product_item_groups, class_name: 'SpecialProductItemGroup'
has_many :item_groups, class_name: 'ItemGroup', through: :special_product_item_groups
end
class ItemGroup < ApplicationRecord
has_many :special_product_item_groups, class_name: 'SpecialProductItemGroup'
has_many :special_products, class_name: 'SpecialProduct', through: :special_product_item_groups
end
class SpecialProductItemGroup < ApplicationRecord
# special_product_id
# item_group_id
belongs_to :special_product, class_name: 'SpecialProduct'
belongs_to :item_group, class_name: 'ItemGroup', foreign_key: :item_group_id, optional: true
end
如果您的STI是special_products
,那么请适当更改外键。此外,您还可以查看this discussion on Github。