在药剂的外生

问题描述:

VARCHAR(custom_size)的PostgreSQL的阵列I具有外生模式是这样的:在药剂的外生

schema "quotes" do 
    field :quote, :string 
    field :tags, {:array, :string} 

    timestamps() 
end 

在对应的迁移有:

create table(:quotes) do 
    add :quote, :string, size: 145 
    add :tags, {:array, :string} 

    timestamps() 
end 

我想在tags每个标签是最大大小为140.如何在迁移中指定此约束?我的目标是在生成的PostgreSQL表中有一个varchar(140)数组,而不是更多'spacy'默认值(255?)。

add接受任何原子作为列类型,并将其作为-是到适配器和PostgreSQL的适配器发送未知类型原样到数据库中,这意味着我们可以作为第二元素中指定的确切类型,即varchar(140){:array, _},它只需要是一个原子。

add :tags, {:array, :"varchar(140)"} 

我测试了这个,正确运行迁移创建了类型需求的列。

my_app_dev=# \d posts 
            Table "public.posts" 
    Column |   Type   |      Modifiers 
----------+--------------------------+--------------------------------------------------- 
... 
tags  | character varying(140)[] | 

有没有必要改变schema任何东西。那里的类​​型应该保持{:array, :string}