下面是一个场景:我正在构建一个系统,允许用户根据自己的技能进行搜索。
。
我有4个表:用户、技能、类别和技能集
假设johndoe(用户名:"johndoe")具有以下类别和技能集:
类别:前端技能: HAML,SASS/SCSS,CoffeeScript,Javascript,jQuery
类别:后端技能: Ruby,Rails,node.js
我希望能够执行以下操作:
user = User.where(:username => "johndoe").first
user.categories
# returns a list of the user's categories
user.skills
# returns a list of the user's skills
user.category.where(name => "Front-End").first.skills
# => returns list of skills in the "Front-End" category
user.skills.where(:name => "HAML").first.category
# returns "Front-End" category
# adds a skill without assigning it to a category
user.skills << skill_object
user.skills.last.level = 9
user.skills.last.interest = 6
user.skills.last.save
# adds a skill while assigning it to a category
user.category.skills << skill_object
user.category.skills.last.level = 9
user.category.skills.last.interest = 6
user.category.skills.last.save为了通过技巧找到用户:
skill = Skill.where(:name => "Javascript").first
skill.users
# returns users possessing skill我已经和我的模特们玩了一段时间了,但是我并没有像他们所希望的那样表现得很好。我需要一个新的视角-有什么建议吗?
发布于 2011-09-19 16:44:10
我对Ruby一无所知,但从关系db的角度来看,我可能只会为每个用户创建一个特殊的、硬编码的、分类字段:Uncategorized。
然后,当您添加技能时,它们要么进入指定的cateogory,要么进入该用户的默认未分类技能。除了针对每个用户的“特殊”记录之外,其他一切都将完美地工作,无论您正在查看哪种技能或类别,您可以将所有约束保留在适当的位置,而不必担心null值。
UserID, User
1, me
CategoryID, UserID, Category
1,1,Uncategorized
2,1,Web GUI
SkillID, Skill
1,Javascript
2,Knitting
SkillID, CategoryID, Level, Interest
1,2,10,75
2,1,50,1根据您使用级别和兴趣的方式,我还会考虑让它们查找表,以便从数据库的角度赋予值意义(并帮助填充下拉列表)。等。
https://stackoverflow.com/questions/7474192
复制相似问题