我有products
模型和variations
模型作为belongs_to
关联。有些变体绝对属于单一产品,但还有其他变体属于许多产品。我可以像belongs_to
关联一样在has_and_blongs_to_many
关联上创建联接表吗?
我的模特目前
product.rb
class Product < ApplicationRecord
has_many :variations, dependent: :destroy
has_and_belongs_to_many :categories
has_and_belongs_to_many :subcategories
include FriendlyId
friendly_id :name, use: :slugged
def should_generate_new_friendly_id?
name_changed?
end
end
variation.rb
class Variation < ApplicationRecord
has_and_belongs_to_many :categories
has_and_belongs_to_many :subcategories
belongs_to :product
include FriendlyId
friendly_id :name, use: :slugged
def should_generate_new_friendly_id?
name_changed?
end
end
答案 0 :(得分:1)
来自Rails guides association basics - the belongs_to association:
belongs_to关联与另一个模型建立一对一的连接,这样声明模型&#34;的每个实例都属于&#34;另一个模型的一个实例。
当您在belong_to :product
模型上执行Variation
关联时,它希望有一个名为product_id
的字段,该字段将指向相关产品。
使用示例:
variation = Variation.first
product = variation.product # this line will get the product which is associated to the variation by the product_id column.
由于它只能容纳一个整数(一个产品ID),因此最佳选择是重构代码。使用&#34; belongs_to&#34;是没有意义的。 as&#34; has_many&#34;关联。
您需要将关联更改为多对多关联的王者。
要为您选择最佳选项,请阅读并了解Rails guides - Association Basics
中的差异***确保在更改关联时不会丢失数据:
这样做的想法:
(您可以复制迁移文件中的数据,只搜索如何操作)