gpt4 book ai didi

ruby-on-rails - rails 4 : how to implement a column with multiple elements

转载 作者:行者123 更新时间:2023-12-04 03:38:10 25 4
gpt4 key购买 nike

我正在使用 Ruby on Rails (rails 4) 创建一个类似于 LinkedIn 的 Web 应用程序,并且我正在尝试在用户表中添加一个“技能”列。每个用户可以有多种技能,我希望能够按技能对用户进行分类。

我可以让“技能”列的类型为数组(准确地说是一个字符串数组),或者我可以有一个新的技能模型并进行关联(使用 has_many)。哪个更好,或者有更好的解决方案吗?

谢谢!

最佳答案

您绝对应该使用基于模型的技能解决方案,而不是序列化数组或任何其他解决方案:

  • 您可以轻松地从一个/多个技能中找到用户(使用序列化数组,这是一个很大的冒险)
  • 数据库中不同技能之间的更好标准:
    • 对于序列化数组,您无法真正控制区分大小写、拼写错误等。
    • 使用 Skill 模型,您可以轻松实现类似搜索的方法(有点像 Stackoverflow 如何处理标签 关于您的帖子),为此目的已经存在大量 gems

全局关系配置如下:

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

有了这个,很容易从技能中找到用户,反之亦然:

web_developpers = Skill.where(name: 'Web developper').first.users
johns_skills = User.where(name: 'John').first.skills

如果明天您的老板希望您添加“首选技能” 或“最佳技能”之类的功能怎么办?或者只是一种“排序”(设置层次结构)用户技能的方法?

只需在连接表 (users_skills) 上添加一个 bool 列 best

User.first.skills.where(users_skills: { best: true })

关于ruby-on-rails - rails 4 : how to implement a column with multiple elements,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24812652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com