删除多对多关系不对称?

时间:2012-09-06 20:42:19

标签: ruby-on-rails ruby-on-rails-3

我有两个模型,产品和类别,以及多对多关系的连接表,分类。

假设我有两个对象,产品和类别,就是上述的实例。

products = Product.new(...)
category = Category.new(...)
product.categories << category

这在rails控制台中成功创建了两个方向的关系,因此:

product.categories
category.products

都是非空的。下一个:

product.categories.delete category

将删除产品对象和连接表中的值。但是,将其从类别对象中删除,以便:

category.products

是非空的,这意味着内存中的category.products对象与实际数据库不同步。对我来说,创造会对称地起作用,但删除却不会,这似乎很奇怪。

以下是相关模型:

class Product < ActiveRecord::Base
  has_many :categorizations, dependent: :destroy
  has_many :categories, through: :categorizations, :uniq => true
end

class Category < ActiveRecord::Base
  has_many :categorizations, dependent: :destroy
  has_many :products, through: :categorizations, :uniq => true
end

class Categorization < ActiveRecord::Base
  belongs_to :product, class_name: "Product"
  belongs_to :category, class_name: "Category"

  validates :product, presence: true
  validates :category, presence: true
end

有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:3)

答案:这是product.reload

这个解释是我在数小时搜索后发现的第一个: https://stackoverflow.com/a/7449957/456280

答案 1 :(得分:0)

您正在观察的行为是Rails的行为方式。请参阅Rails Guide on associations

您可能还想查看有关has_and_belongs_to_many(HABTM)关联的部分。如果重命名连接表categories_products,HABTM可以让你摆脱显式的分类模型。