Phoenix/Elixir'e gerçekten yeniyim ve kafamı changeet'lerin etrafına sarmaya çalışıyorum.Bir Ecto değişiklik kümesini repo'ya yerleştirmeden önce nasıl değiştirilir?
Bir model oluşturmak veya güncelleştirmek için kullanılan bir dizi değişiklik içerdiğini anlıyorum.
Bilmek istediğim, bir değişikliği veritabanına aktarmadan önce nasıl değiştirebilirim ve nasıl değiştirebilirim.
- İnsanların veritabanında yeni sanatçıları oluşturmasına izin bir form var:
Benim kullanım durumu şudur.
- Bu formda bir uzmanlık alanı vardır.
- sanatçı oluşturmadan önce, ben nedeniyle değişmezlik kısıtlamaları doğrudan changeset değiştirerek Bu mümkün bile emin değilim dize
bir dizi olarak saklamak "" ile özel alanını bölmek istediğiniz ama repo'ya eklemek için başka bir değişiklik yapabilirim.
Herhangi bir öneri memnuniyetle karşılanıyor ve yapmakta olduğum kötü uygulamaları veya aptalca şeyleri göstermekten çekinmeyin! yorumları sonrasında
DÜZENLEME: Ben böyle bir şey bakıyorum:
defp put_specialty_array(changeset) do
case changeset do
%Ecto.Changeset{valid?: true, changes: %{specialty: spec}} ->
put_change(changeset, :specialty, String.split(spec, ","))
_ ->
changeset
end
end
Bu, kullanıcının şifresini toplamak ve saklamak için benzer bir yaklaşımdır. ["Programlama Phoenix'i"] 'nin (https://pragprog.com/book/phoenix/programming-phoenix) bunu nasıl yaptığını kontrol edin (https://media.pragprog.com/titles/phoenix/code/authentication/listings /rumbl/web/models/user.change1.ex). DEFP put_specialty_array (değişiklik kümesi) % Ecto.Changeset {geçerli ?: gerçek, değişiklikleri yapmak değişiklik kümesi vaka yapın::% {uzmanlık: Spec – AbM
Yani ben böyle bir şey yapabileceğini (özellikle nasıl 'registration_changeset' put_pass_hash'' çağırıyor) }} -> put_change (changeset,: uzmanlık, String.split (spec, ",")) changeset end end ? – Cratein
Önerinizi biraz sabitleyin – AbM