我正在使用Ruby on Rails创建一个类似于LinkedIn的Web应用程序(rails 4),我正在尝试在User表中添加“技能”列。每个用户都可以拥有多种技能,我希望能够按技能对用户进行分类。
我可以将“技能”列设置为数组类型(确切地说是字符串数组),或者我可以拥有一个新的技能模型并建立关联(使用has_many)。哪个更好,还是有更好的解决方案?
谢谢!
答案 0 :(得分:5)
您绝对应该使用基于模型的技能解决方案而不是序列化数组或任何其他解决方案:
全局关系配置如下:
class User < ActiveRecord::Base
has_many :users_skills
has_many :skills, through: :users_skills
class UsersSkill < ActiveRecord::Base
belongs_to :user
belongs_to :skill
validates :user_id, :skill_id, presence: true
class Skill < ActiveRecord::Base
has_many :users_skills
has_many :users, through: :users_skills
有了这个,很容易从Skill找到用户,反之亦然:
web_developpers = Skill.where(name: 'Web developper').first.users
johns_skills = User.where(name: 'John').first.skills
如果明天你的老板希望你添加一个类似&#34;首选技能&#34; 或&#34;最佳技能&#34 ;?或者只是一种方式来订购&#34; (在用户的技能之间设置层次结构?
只需在联接表(best
)
users_skills
即可
User.first.skills.where(users_skills: { best: true })
答案 1 :(得分:0)
您使用的是Postgresql吗?
然后您可以使用JSON data type
我在这里写了一个问题和答案:
Postgres JSON data type Rails query
您可以使用列skills
将JSON作为{skills: [1,2,3,4]}