用于分离同一模型的两种不同类型的数据库组织

时间:2014-12-29 19:15:34

标签: ruby-on-rails relationships database-relations

所以我希望我的用户模型具有很多技能。我希望技能有两种不同的类别:通缉技能和附属技能。

例如,用户可以将技能添加到他们拥有的个人资料中,例如HTML。他们还可以为他们希望学习的个人资料添加技能,例如Ruby on Rails。在他们的个人资料中,它将分别列出他们当前的技能和想要的技能。

从高层次来看,构建这个的最佳方法是什么?我只想要有1个没有重复的技能模型,但我希望有一种方法让用户在数据库中拥有2个独立的技能组。

2 个答案:

答案 0 :(得分:1)

要实现这一目标,您需要两个技能字段,例如:wanted_skillpossessed_skill

因此,在Ruby on Rails中,您可以为同一模型提供许多引用(具有不同的名称),您只需要在引用中使用class_name声明哪个类对应,例如:

class User < ActiveRecord::Base
  belongs_to :wanted_skill, class_name: 'Skill'
  belongs_to :possessed_skill, class_name: 'Skill'
end

答案 1 :(得分:1)

您可以使用单表继承

class Skill < ActiveRecord::Base
end

class WantedSkill < Skill
   belongs_to :user
end

class PossessesSkill < Skill
  belongs_to :user
end

您的技能表应该有一个名为type的列,其中将存储该技能的类型。

WantedSkill.create(:name => "html")

上面会将记录保存在技能表中,类型为'WantedSkill'。您可以通过

检索它
WantedSkill.where(:name => "html").first

您的用户关联可以像

class User < ActiveRecord::Base
   has_many :wanted_skills
   has_many :possessed_skills
end

您可以阅读文档here