我正在尝试创建一个linkedin克隆,用户可以在其中拥有多种技能。他们还可以对每种技能进行描述,并选择技能是他们的主要技能还是辅助技能(他们只能拥有一项技能)。
我无法决定是否只使用has_many或has_many:through。
如果我使用has_many
class Skill < ActiveRecord::Base
belongs_to :user
validates :description, presence: true
validates :name, presence: true
end
class User < ActiveRecord::Base
has_many :skills, dependent: :destroy
end
技能表还将包含主要和次要列,它们是布尔值。
如果我使用has_many:通过
class Skill < ActiveRecord::Base
has_many :users, through: :users_skills
has_many :users_skills
end
class UsersSkill < ActiveRecord::Base
belongs_to :user
belongs_to :skill
end
class User < ActiveRecord:Base
has_many :skills, through: :users_skills
has_many :users_skills
end
在这里,我将在UsersSkill模型中拥有主要和次要布尔列。
您认为哪个是更好的选择?
答案 0 :(得分:0)
基于您声明的要求:
我主要希望人们能够输入搜索技能 有这种技能的人
他们也可以对每项技能进行描述并选择是否 技能是他们的主要技能或辅助技能(他们只能拥有 其中一个)。
仅仅是我对模型意义的理解,即“技能”不一定属于单个用户 - 我会选择has_many:through。
原因在于技能是独立的(正如你所说,你希望能够搜索它们)。仅仅因为一个人列出了“擦洗地板”作为他们的主要技能,而另一个人作为他们的辅助技能,并不意味着你应该有两个带有“擦洗地板”的条目。拥有一个技能,并使用UsersSkills将其分配给多个用户,以及特定于该用户的技能实例的任何信息。
您可以将主要/次要排名放在users_skills表上。如果您需要扩展存储在这些映射中的信息,此模型的存在还将为您节省大量的工作。
答案 1 :(得分:0)
最重要的是,选择取决于系统的一项功能 - 用户的技能是否特定于他们,或者更广泛的群体的一部分
- 如果您的用户自己添加技能,
has_many
关系会很好has_many :through
关系如果您的用户的技能可以从更广泛的池中选择将会很好
-
<强>系统强>
您必须记住,由于Rails为object-orientated,因此ActiveRecord associations的设置主要取决于系统中对象的关联。
many-to-many
关联主要基于两个模型之间的共享对象;而one-to-many
关联是具有大量依赖数据的模型的结果
为了做出决定,我只想看看你有什么。如果您想根据LinkedIn的喜欢预先填充技能,请转到has_many :through