我有两个模型,产品和类别,以及多对多关系的连接表,分类。
假设我有两个对象,产品和类别,就是上述的实例。
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
有什么想法吗?谢谢!
答案 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可以让你摆脱显式的分类模型。