cmwright cmwright - 2 years ago 447
Ruby Question

Using Rails serialize to save hash to database

I'm try to save a hash mapping ids to a number of attempts in my rails app. My migration to the database to accommodate this new column:

class AddMultiWrongToUser < ActiveRecord::Migration
def self.up
add_column :users, :multi_wrong, :string

def self.down
remove_column :users, :multi_wrong

In my model I have:

class User < ActiveRecord::Base
serialize :multi_wrong, Hash

But when I use the rails console to test this by doing:

user = User.create()
user.multi_wrong = {"test"=>"123"}

The output is false. What's going wrong here?

Answer Source

The column type is wrong. You should use Text instead of String. Therefore, your migration should be:

 def self.up
   add_column :users, :multi_wrong, :text

Then Rails will properly convert it into YAML for you (and perform proper serialization). Strings fields are limited in size and will only hold especially-small values.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download