所以我希望我的用户模型have_many技能。我希望技能分为两个不同的类别:想要的技能和拥有的技能。
例如,用户可以将技能添加到他们拥有的个人资料中,例如 HTML。他们还可以在他们的个人资料中添加他们想要学习的技能,例如Ruby on Rails。在他们的个人资料中,它将分别列出他们当前的技能和想要的技能。
从高层次来看,构建它的最佳方式是什么?我只希望有 1 个技能模型,没有重复项,但我希望有一种方法让用户在数据库中拥有 2 组单独的技能。
您可以使用单个表继承
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.where(:name => "html").first
您的用户关联可以像
class User < ActiveRecord::Base
has_many :wanted_skills
has_many :possessed_skills
end
您可以在此处阅读文档
要实现这一目标,您需要两个技能领域,例如:wanted_skill
和possessed_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