多模型和表模式建议

时间:2012-04-02 21:41:02

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

如果我有3个型号......

  

发布,Logo_Category和徽标

和5个表

  

帖子,徽标,logo_categories,logos_posts和logos_categories_posts

帖子可以包含任意数量的logo_categories中的任意数量的徽标。我已经开始使用HABTM,但我认为我可能在我的架构方面选择了错误的路径。

任何人都知道关联这些模型的最佳方式是什么?

干杯

修改

对不起伙计们,我以为我已经解决了这个问题,但是......

与保罗所建议的一致,我现在将我的联想改为以下内容。

POST.erb

has_and_belongs_to_many :logos
has_many :logo_categories, :through => :logos  

LOGO.erb

  belongs_to :logo_category
  has_and_belongs_to_many :posts

LOGO_CATEGORY.erb

has_many :logos
has_and_belongs_to_many :posts

我的桌子现在......

  

帖子(id),徽标(id),logos_posts(id,logo_id,logo_category_id),   logo_categories(id)

我的帖子_form加载正常,所有徽标和logo_categories都加载了正确的值,并且正确检查/取消选中(编辑帖子时)。

我可以检查新徽标或取消选中现有徽标并记录正常。但是,如果我更改了logo_category,我会收到以下错误!

  

无法修改关联'Post#logo_categories',因为它会去   通过一个以上的其他协会。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

对于你的表:

[posts] 1--n [post_logos] n--1 [logo] n--1 [logo_category]
  • 每个帖子在帖子表中都有一行,并带有唯一的post_id
  • 每个徽标 徽标表中有一行,带有唯一的logo_id
  • 每个徽标表行 链接到一个logo_category行
  • 每次关联徽标时 使用帖子,在post_logos表中创建一行。它有 两个外键列:post_id和logo_id。

在ruby中,每个Post对象都可以有一个数组或徽标对象列表。每个Logo对象组成一个Logo_Category对象(具有一个Logo_Category成员或变量)。