has_and_belongs_to_many或has_many:通过或其他什么?

时间:2014-04-03 18:47:46

标签: ruby-on-rails rails-migrations

我正处于为以下场景提出良好模型设计的情况 有一个User模型有一个ProfileCategory也是一个不同的模型。每个Profile喜欢和不喜欢一些Categories。那么如何创建迁移和模型。此外,在创建或编辑个人资料时,我被迫使用multiselect来选择喜欢和不喜欢的内容。

我计划的是通过以下方式创建一个与Like相关的模型Profile

Profile  -> has_one :like 

Like     -> has_and_belongs_to_many :categories
            belongs_to: profile

Category -> has_and_belongs_to_many :likes

同样也不喜欢。因此,当我们获得@profile.like.categories时,将列出特定@profile所喜欢的所有类别。

我的想法是否可取。请指导。

1 个答案:

答案 0 :(得分:0)

HABTM也是我为此推荐的 - 它的主要特色是为likes提供一种方法,让categories有很多Like - 如果你不需要任何额外的属性,你HABTM会好起来的

就个人而言,我会重构删除Profile模型,只需提供categories HABTM #app/models/profile.rb Class Profile < ActiveRecord::Base has_and_belongs_to_many :categories, join_table: "likes_profiles", foreign_key: "like_id" end #app/models/category.rb Class Category < ActiveRecord::Base has_and_belongs_to_many :categories, join_table: "likes_profiles", association_foreign_key: "like_id" end

category

这会将每个like视为关系中的dislikes。我很感激它无法处理{{1}},但希望能给你一些关于你能做什么的想法