【问题标题】:Ruby on rails: modeling foreign key relationships.Ruby on rails:建模外键关系。
【发布时间】:2012-09-21 18:30:41
【问题描述】:

在我的应用中,我有以下模型:ListItemCategory

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

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

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

【问题讨论】:

    标签: ruby-on-rails model foreign-key-relationship


    【解决方案1】:

    Category - List 关系的两边肯定需要has_many 关系。

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

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

    【讨论】:

      【解决方案2】:

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

      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 方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-05
        • 2011-10-05
        • 1970-01-01
        • 2023-04-01
        相关资源
        最近更新 更多