2016-07-06 45 views
2

我正在与Elixir和Phoenix合作,我有一张桌子,我想为此表添加一个新字段,但我希望此字段是唯一的。由于我的DataBase在这个表中已经有一堆寄存器了,我想用来自表中另一个字段的值填充新字段。添加一个独特的字段并填写它

例如,表它的帖子,我添加新的字段名称,这将是潮头,并希望所有的老注册在外地电子邮件值填充字段名。

我该怎么做?我是否在迁移过程中执行此操作?像:

def change do 
    alter table(:posts) do 
    add :name, :string, null: false, default: :email 
    end 

    create unique_index(:posts, [:name]) 
end 

或在模型中?

请在她的一点帮助将是非常感谢。

回答

5

您需要使用外生的update_all做到这一点:

alias Myapp.Repo 
alias Myapp.Post 
import Ecto.Query 

from(p in Post, update: [set: [name: p.old_name]]) 
|> Repo.update_all([]) 

作为旧名称旧场并命名要将旧值的字段。

Ecto.Query文档https://hexdocs.pm/ecto/Ecto.Repo.html#c:update_all/3

+0

外观极好,这有很大帮助。谢谢 – SSM89