Rails 5:在连接表记录

时间:2018-02-01 03:39:24

标签: ruby-on-rails ruby associations has-many-through

我有这种情况。

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_idnil

在验证中,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

提前致谢。

1 个答案:

答案 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