2017-10-13 9 views
1

私はこのようなエクトスキーマがありますがあります対応する移行でA VARCHARのPostgreSQLのアレイ(custom_size)

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です。移行でこの制約を指定するにはどうすればよいですか?私の目標は、より多くの 'spacy'のデフォルト(255?)ではなく、結果のPostgreSQLテーブルにvarchar(140)の配列を持たせることです。

答えて

3

addは、カラムの型として任意のアトムを受け入れ、それをそのままアダプタに渡し、PostgreSQLアダプタは未知の型をそのままデータベースに送ります。つまり、正確な型、つまりvarchar(140)を2番目の要素{:array, _}の場合は、原子である必要があります。

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

これをテストして、移行を実行すると、必要なタイプの列が正しく作成されます。

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

schemaでは何も変更する必要はありません。タイプは{:array, :string}のままにしてください。

関連する問題