Size: a a a

2020 August 24

IK

Ihor Katkov in pro.elixir
там есть баг в otp-23
источник

IK

Ihor Katkov in pro.elixir
и баг в ranch
источник

V

V in pro.elixir
Ihor Katkov
а какая версия elixir/otp?
Пробовал 1.9.4/22.2.8, 1.10.4/23.0.3
источник

ŹR

Źmićer Rubinštejn in pro.elixir
У меня короче всегда все спеками обмазано. Даже приватные функции и тыды
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Честно говоря, у меня на эрланге еще и комментарии к каждой строчке
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Потому что ну его нахер на этом навозе мамонта по другому писать)
источник

B

Bogdan in pro.elixir
Есть ли в Ecto функция, чтобы извлечь только валидные изменения из changeset?

сейчас решаю так.

params =
   for {k, v} <- changeset.changes,
   not Keyword.has_key?(changeset.errors, k), do: {k, v}
источник

AD

Anastasiya Dyachenko in pro.elixir
Bogdan
Есть ли в Ecto функция, чтобы извлечь только валидные изменения из changeset?

сейчас решаю так.

params =
   for {k, v} <- changeset.changes,
   not Keyword.has_key?(changeset.errors, k), do: {k, v}
можно немного упростить твой код
invalid_fields = changeset.errors |> Enum.into(%{}) |> Map.keys()
valid_changes = changeset.changes |> Map.drop(invalid_fields)


а какая вообще задача, может можно проще решить?
источник

LL

Lama Lover in pro.elixir
Anastasiya Dyachenko
можно немного упростить твой код
invalid_fields = changeset.errors |> Enum.into(%{}) |> Map.keys()
valid_changes = changeset.changes |> Map.drop(invalid_fields)


а какая вообще задача, может можно проще решить?
Enum.into(%{}) эквивалентен Map.new
источник

LL

Lama Lover in pro.elixir
Поэтому
Map.drop(changeset.changes, Keyword.keys(changeset.errors))
источник

LL

Lama Lover in pro.elixir
Bogdan
Есть ли в Ecto функция, чтобы извлечь только валидные изменения из changeset?

сейчас решаю так.

params =
   for {k, v} <- changeset.changes,
   not Keyword.has_key?(changeset.errors, k), do: {k, v}
А так, функции нет, вроде
источник

B

Bogdan in pro.elixir
Anastasiya Dyachenko
можно немного упростить твой код
invalid_fields = changeset.errors |> Enum.into(%{}) |> Map.keys()
valid_changes = changeset.changes |> Map.drop(invalid_fields)


а какая вообще задача, может можно проще решить?
в live режиме вносить валидные изминения в БД.
источник

AD

Anastasiya Dyachenko in pro.elixir
Bogdan
в live режиме вносить валидные изминения в БД.
может стоит поменять валидацию, если ошибки не критичны и все равно нужно вносить в бд
источник

B

Bogdan in pro.elixir
они критичны. Просто нужно, чтобы было автосохрание. Юзер может ввести одно поле и позже вернуться к заполнению.
источник

LL

Lama Lover in pro.elixir
Bogdan
Есть ли в Ecto функция, чтобы извлечь только валидные изменения из changeset?

сейчас решаю так.

params =
   for {k, v} <- changeset.changes,
   not Keyword.has_key?(changeset.errors, k), do: {k, v}
Можно попробовать Changeset.apply_changes, который вернёт новую запись с внесёнными изменениями, несмотря на ошибки
источник

AD

Anastasiya Dyachenko in pro.elixir
Bogdan
они критичны. Просто нужно, чтобы было автосохрание. Юзер может ввести одно поле и позже вернуться к заполнению.
мб тогда вместо ошибки не записывать неправильное поле, например

def validate_some_field(changeset) do
 if is_valid_field(...) do
   changeset
 else
   put_change(changeset, :field, nil)
 end
end
источник

AD

Anastasiya Dyachenko in pro.elixir
хотя тогда пользователю ошибку отсюда уже не показать, это да
источник

B

Bogdan in pro.elixir
Lama Lover
Можно попробовать Changeset.apply_changes, который вернёт новую запись с внесёнными изменениями, несмотря на ошибки
пробовал, что-то он не так возвращал. Сейчас еще раз проверю.
источник

B

Bogdan in pro.elixir
А да он структуру возвращает, а мне нужны парметры на апдейт.
источник

LL

Lama Lover in pro.elixir
Bogdan
А да он структуру возвращает, а мне нужны парметры на апдейт.
Так а ты не можешь по структуре апдейтить?
источник