Rails 4:如何实现具有多个元素的列

时间:2014-07-17 20:11:35

标签: ruby-on-rails ruby-on-rails-4 model-associations

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

我可以将“技能”列设置为数组类型(确切地说是字符串数组),或者我可以拥有一个新的技能模型并建立关联(使用has_many)。哪个更好,还是有更好的解决方案?

谢谢!

2 个答案:

答案 0 :(得分:5)

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

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

全局关系配置如下:

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]}