2016-08-08 9 views
2

私はいくつかのエクトレコードを持っています。しかし、私は大量のレコードを再生するためにそれらを複製(100倍にする)したい。エクト機構を介してどうすればいいですか?Ectoのレコードを複製するには?

+0

おそらくhttps://github.com/thoughtbot/ex_machinaが必要です。 – Dogbert

+0

私は 'test' envの外でex_machinaを使いたくありません:P – asiniy

+0

ダミー解法:' Repo.insert'でいくつかの範囲をループしますが、あなたはそれについてすでに考えていました。 – PatNowak

答えて

4

あなたは、単にレコードからIDキーを削除することによってdupを複製することができます。

for n <- (0..10), do: User |> Repo.get(record_id) |> Map.delete(:id) |> Repo.insert 

あなたはユニークなキーを持っている場合には動作しませんが...それは構造体を自分で移入する必要があなたを残します:

def spawn_records(line_numbers) do 
    for line <- line_numbers do 
    %User{first_name: "Tyrone", last_name: "Shoelaces#{line}"} |> Repo.insert 
    end 
end 

この2番目の回答を考えているなら、私はDogbertをエコーし​​て、devでex_machinaを使用することをおすすめします。

0

私は:idを取り除いた後、私は自分の関連付けをあらかじめロードしていないため、挿入しようとしている間に問題に遭遇しました。私がレコードを複製するだけであれば、私はそれをする必要はないはずです。だから私はこの方法を思いついたのです。これは、あなたのスキーマの必須フィールドとオプションフィールドがモジュールの定数として定義されていることを前提としています。

@required_fields [:id, :name, :association_id] 
@optional_fields [:other_field] 

def duplicate(record) do 
    dup = Map.take(record, @required_fields ++ @optional_fields) 

    changeset(%YourModule{}, dup) 
    |> Repo.insert! 
end 
関連する問題