Size: a a a

2021 May 24

ŹR

Źmićer Rubinštejn in pro.elixir
Через часок запиню, а то перекроет успешный эвропейский стартап
источник

SV

Slava Vovk in pro.elixir
😄😄
источник

B

Bogdan in pro.elixir
[
%{a: 1},
%{b: 2},
%{c: 3}
….
]


Есть list of maps, нужно смержить все в одну мапу, кто предложит самый изящный вариант?)
источник

LL

Lama Lover in pro.elixir
Enum.reduce(list_of_maps, &Map.merge/2)
источник

B

Bogdan in pro.elixir
в каждой мапе гарантированно 1 ключ + 1 значение
источник

B

Bogdan in pro.elixir
топчик)
источник

A ß in pro.elixir
list_of_maps
|> Enum.flat_map(&Map.to_list/1)
|> Map.new()
источник

ММ

Максим Мартынов... in pro.elixir
Сложно переплюнуть этот вариант по изящности)
источник

A ß in pro.elixir
это правда
источник
2021 May 25

B

Bogdan in pro.elixir
Заметил что upsert, несмотря на конфликт у корневой структуры, вставляет дочернии структуры.

То есть родителя он не вставляет,но запихивает детей с parent_id: nil в таблицу.

Можно ли изменить данное поведение, хочу чтобы на конфликте он вообще ничего не записывал.
источник

ММ

Максим Мартынов... in pro.elixir
Это делается через транзакции. Смотри в сторону Repo.transaction либо Ecto.Multi
источник

B

Bogdan in pro.elixir
я помню что-то я встречал такое, вроде
on_conflict: :nothing
работал вообще не так как ожидалось, попробую сделать еще
on_conflict: [set: [updated_at: time]]


А наверное еще лучше просто уберу upsert, и наверное ошибку из Repo.insert…

Но в целом интересное наблюдение, мне кажется так не должно происходить на конфликте апсерта, nothing нифига не nothing получается…
источник

ММ

Максим Мартынов... in pro.elixir
Ну по сути у тебя два независимых запроса. В первом при записе в родительскую таблицу сработал on_conflict, и, т.к
указано nothing, вместо идентификаторов измененных записей вернулся null. Второй тупо вставил это значение в дочернюю таблицу
источник

B

Bogdan in pro.elixir
но если делать это с Repo.insert без on_conflict опции, то этого не происходит.
источник

ММ

Максим Мартынов... in pro.elixir
А в дочерней таблице точно не должно быть constraint на parent_id?
источник

B

Bogdan in pro.elixir
не должно, но он там parent_id nil ставит. Можно поставить null: false но хз
источник

ММ

Максим Мартынов... in pro.elixir
Потому что база выбрасывает исключение, и запрос сразу возвращает error
источник

ММ

Максим Мартынов... in pro.elixir
Тогда upsert не сможет создать такую кривую запись
источник

B

Bogdan in pro.elixir
Ну тогда наверное не нужен upsert здесь просто 🙂 я его выбрал потому-что дубликат не является ошибкой, не хочу ее спамить в лог. Там вроде можно убрать ошибку через changeset - так и сделаю.
источник

B

Bogdan in pro.elixir
Просто я ожидал что он как-то так же отработает как и Repo.insert и on_conflict: :nothing значит что ошибка не будет выброшена :0
источник