Rails迁移文档

时间:2014-08-13 04:15:32

标签: ruby-on-rails

非常简单的问题,但很难找到Rails Active Record迁移的完整API文档。

任何人都知道获取列表的最佳位置(源代码除外)

e.g。找到在rails 4中使用数组的示例,但在docs中找不到

class AddEmailsToUser < ActiveRecord::Migration
  def change
    add_column :users, :emails, :string, array: true, default: '{}'
  end
end

e.g。在 https://coderwall.com/p/sud9ja

1 个答案:

答案 0 :(得分:-1)

不是您正在寻找的内容,但这里是迁移中对数组的rails支持的github pull请求:

https://github.com/rails/rails/pull/7547

PostgreSQL数组类型支持。任何数据类型都可用于创建阵列列,具有完全迁移和架构转储器支持。 要声明数组列,请使用以下语法:

create_table :table_with_arrays do |t|
  t.integer :int_array, :array => true
  # integer[]
  t.integer :int_array, :array => true, :length => 2
  # smallint[]
  t.string :string_array, :array => true, :length => 30
  # char varying(30)[]
end 

这尊重任何其他迁移细节(限制,默认值等)。 ActiveRecord将在进出数据库的路上序列化和反序列化数组列。 有一点需要注意:PostgreSQL不对元素数量施加任何限制,任何数组都可以是多维的。任何多维数组都必须是矩形的(每个子数组必须具有与其兄弟相同数量的元素)。

边缘指南:

http://edgeguides.rubyonrails.org/active_record_postgresql.html

# db/migrate/20140207133952_create_books.rb
create_table :books do |t|
  t.string 'title'
  t.string 'tags', array: true
  t.integer 'ratings', array: true
end
add_index :books, :tags, using: 'gin'
add_index :books, :ratings, using: 'gin'

# app/models/book.rb
class Book < ActiveRecord::Base
end

# Usage
Book.create title: "Brave New World",
            tags: ["fantasy", "fiction"],
            ratings: [4, 5]

## Books for a single tag
Book.where("'fantasy' = ANY (tags)")

## Books for multiple tags
Book.where("tags @> ARRAY[?]::varchar[]", ["fantasy", "fiction"])

## Books with 3 or more ratings
Book.where("array_length(ratings, 1) >= 3")