Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Add an array column in Rails

How do you declare an array column in Rails?

Detail

I have the following model

rails generate model User address:text 

but I want a model which can store multiple addresses per user. The following declaration gives me an error

rails generate model User address[]:text  

How do you declare an array column in Rails?

like image 337
chandradot99 Avatar asked Sep 05 '15 05:09

chandradot99


People also ask

What is db migration in Rails?

A Rails migration is a tool for changing an application's database schema. Instead of managing SQL scripts, you define database changes in a domain-specific language (DSL). The code is database-independent, so you can easily move your app to a new platform.


1 Answers

You can use following steps

rails g migration add_subjects_to_book subjects:text 

And the migration file:

class AddSubjectsToBook < ActiveRecord::Migration   def change     add_column :books, :subjects, :text, array: true, default: []   end end 

We can check it now:

2.1.2 :001 > b = Book.create    (0.2ms)  BEGIN   SQL (2.0ms)  INSERT INTO "books" ("created_at", "updated_at") VALUES ($1, $2) RETURNING "id"  [["created_at", "2014-10-17 08:21:17.870437"], ["updated_at", "2014-10-17 08:21:17.870437"]]    (0.5ms)  COMMIT  => #<Book id: "39abef75-56af-4ad5-8065-6b4d58729ee0", title: nil, created_at: "2014-10-17 08:21:17", updated_at: "2014-10-17 08:21:17", description: {}, metadata: {}, subjects: []>  2.1.2 :002 > b.subjects.class  => Array 

If you want to add array while creating table you can do as follows

create_table :products do |t|   t.string :name, null: false   t.references :category, null: false   t.text :tags, array: true, default: [] end 

Note: array column is supported by PostgreSQL

like image 87
shrikant1712 Avatar answered Oct 10 '22 21:10

shrikant1712