0

在我的应用程序中,我有以下模型ListItemCategory.

每个项目belong_to一个列表。每个项目belongs_to一个类别。

每个项目列表还需要以某种方式与多个类别相关联。这意味着如果用户创建一个类别,它将有一个list_id分配给它,该分配等于id创建该类别时用户正在处理的列表。这样,当用户决定摆脱列表时,我也可以摆脱为该列表创建的所有自定义类别。问题是我还希望有一些“默认”类别:可用于所有列表的类别。我不确定如何建模lists和之间的关系categoriesbelongs_to对我不起作用,因为“默认”类别并不真正属于任何特定列表,它们属于所有列表。

对于如何处理这种关系的任何建议,我将不胜感激!

4

2 回答 2

0

你肯定需要has_many关系双方的Category关系List

您可以将作为“默认值”的类别名称保留在类别模型内的常量中,或者类别可以具有布尔属性,以便您知道是否删除它。

要在删除列表时删除类别,您可能需要编写一个自定义方法,该方法可以作为after_destroyList 模型上的回调运行。

于 2012-09-21T19:07:14.410 回答
0

您想为 Category 和 List 模型设置多对多关系。要做到这一点,这就是你要做的

class List < ActiveRecord::Base
  has_many :categorizations, dependent: :destroy
  has_many :categories, :through => :categorize
end

class Categorization < ActiveRecord::Base
  belongs_to :category
  belongs_to :list
end 

class Category < ActiveRecord::Base
  has_many :categorizations, dependent: :destroy
  has_many :lists, :through => :categorizations
end 

class Item < ActiveRecord::Base
  belongs_to :category
  belongs_to :list
end

这将创建第三个表来跟踪所有模型之间的关系。Ryan Bates 在这个主题上有一个很棒的railscast,你应该去看看。

然后dependent: :destroy将确保如果一个被删除,那么关系也会被删除,然后为了确保从该列表中删除其他类别,您可以使用 before_destroy 或 after_destroy 方法。

于 2012-09-21T19:57:00.727 回答