2016-04-28 1 views
1

文字列concatが<>であると思っていましたが、以下のコードで動作させることができません。私は、エラーを取得Ectoで文字列を更新する方法

Only literal binaries and strings are allowed, dynamic values need to be explicitly interpolated in queries with ^

私は^を追加しましたが、それはまだ動作しません

私が思う機能として読まれているコードは、私の文字列フィールドとして解釈される方法についての奇妙な何かがあり
def delete(conn, %{"id" => id}) do 
    card = Repo.get!(Card, id) 

    # Look for any cards that have chosen one as master 
    # Update name to deleted card + version name 
    # remove master_id 
    query = 
     from(c in Card, 
      where: c.master_id == ^id, 
      update: [set: [ estimate_name: (^card.estimate_name <> ^c.estimate_name), 
          master_id: 0 ]]) 
     |> Repo.update_all([]) 

:あなたが連結する二つの部品の一つとして

<<^card.estimate_name()::binary, ^c.estimate_name()::binary>>

答えて

3

あなたが必要と、テーブルの列です連結を行うデータベース。

Ectoにはこれを行う機能がないため、fragmentを使用する必要があります。これはSQLiteとPostgreSQLで動作するはずです(私はMySQLについてはわかりません):

update: [set: [estimate_name: fragment("? || ?", ^card.estimate_name, c.estimate_name), 
       master_id: 0]] 
+0

これを新しいインスタンスで複製しようとしました。 '' job_id''( '' job_id''、 '' job_id''、 'p_jobs''))' '(プロジェクト内のp、ここで:p.id ==^id、update: 'p.jobs'は整数の配列です。私はエラーが出ます: 'Postgrexは、" _int4 "と入力して2を取得してエンコード/キャストできるリストを期待していました。配列に2を追加したい –

+0

配列に項目2を追加するか、配列の各項目に2を追加しますか? – Dogbert

+0

'ARRAY [4,5,6]' - > '2 || ARRAY [4,5,6] 'c.f. http://www.postgresql.org/docs/9.1/static/functions-array.html –

関連する問題