Ruby on Rails: Saving multiple values in a single database cell

允我心安 提交于 2019-12-03 20:16:24

I would not recommend storing multiple values in the same database column. It would make querying very difficult. For example, if you wanted to look for all the users with a particular skill set, the query would clumsy both on readability and performance.

However, there are still certain cases where it makes sense.

  • When you want to allow for variable list of data points
  • You are not going to query the data based on one of the values in the list

ActiveRecord has built-in support for this. You can store Hash or Array in a database column.

  1. Just mark the columns as Text

    rails g model Exp experience:text education:text skill:text
    
  2. Next, serialize the columns in your Model code

    class Exp < ActiveRecord::Base
      serialize :experience, :education, :skill
      # other model code
    end
    
  3. Now, you can just save the Hash or Array in the database field!

    Exp.new(:skill => ['Cooking', 'Singing', 'Dancing'])
    
rails_id

You can do it using a serialized list in a single column (comma-separated), but a really bad idea, read these answers for reasoning:

I suggest changing your schema to have a one to many relationship between users and skills.

Rails 4 and PostgreSQL comes with hstore support out of the box, more info here In rails 3 you can use gem to enable it.

It depends on what kind of functionality you want. If you want to bind the Exp model attributes with a form (for new and update operations) and put some validations on them, it is always better to keep it in a separate table. On the other hand, if these are just attributes, which you just need in database keep them in a single column. There is way by which you can keep the serialized object like arrays and hashes in database columns. Make them a array/hash as per your need and save it like this.

http://api.rubyonrails.org/classes/ActiveRecord/AttributeMethods/Serialization/ClassMethods.html#method-i-serialize

Serialized attributes, automatically deserializes when they are pulled out of tables and serialized automatically when saved.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!