Я думал, что строка 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>>
Я попытался воспроизвести это в новом экземпляре. 'from (p in Project, где: p.id ==^id, update: [set: [jobs: fragment ("? ||? ",^job_id, p.jobs)]])', где 'job_id' - целое число, а 'p.jobs' - массив целых чисел. Я получаю сообщение об ошибке: 'Postgrex ожидал список, который может быть закодирован/отличен, чтобы ввести« _int4 », получил 2.'. Я хочу добавить 2 в массив –
Вы хотите добавить элемент 2 в массив или добавить 2 к каждому элементу массива? – Dogbert
'ARRAY [4,5,6]' -> '2 || ARRAY [4,5,6] 'c.f. http://www.postgresql.org/docs/9.1/static/functions-array.html –