2016-03-30 14 views
0

Phoenix uygulamasındaki Kullanıcılar modelinde bir boolean özniteliğim var.Bir Modelin Boolean Özniteliği Terminalden Nasıl Güncelleştirilir

Bu özniteliği terminal/komut isteminden nasıl güncellerim? Örneğin

- Raylar konsolun böyle bir şey yapabilir (benim terminalde rails c çalıştıran) içinde:

u = User.find(1) 

u.admin = true 

u.save 

Phoenix Bunu yapmanın en iyi yolu nedir? (iex -S mix aracılığıyla? - Bence bu, rails c'a en yakın şey).

cevap

4

iex -S mix'un bir konsol açacağı konusunda haklısınız.

Değişiklik yapmak için Ecto.Changeset yapısını kullanmanız gerekir. Ecto.Changeset.change/2 keyfi değişiklikler yapmak için en kolay yoludur:

alias MyApp.{Repo, User} # for convenience, not required 
user = Repo.get(User, 1) 
Ecto.Changeset.change(user, %{admin: true}) |> Repo.update! 

Not böyle güncellemelerini yaparken kullanıcıların doğrulamaları çalıştırmak istiyorsanız, muhtemelen modelinde tanımlanan fonksiyonu (varsayılan olarak changeset/2) kullanmak isteyeceği .

1

@ Gazer'in cevabı açıkça doğruyken, aynı sonucu elde etmenin daha basit bir yolu olduğunu düşünüyorum. Eğer basit ve güvenli bir değişim yapmak istiyorsanız

u = App.Repo(User, 1) # corresponds to -> u = User.find(1) 

u = %{ u | admin: true } # corresponds to -> u.admin = true 

App.Repo.update(u) # corresponds to -> u.save 

Orada, ancak, değişiklikler doğrulama konusu olmayacak bu yaklaşımla, farkında olması gerekir:

Sen gibi bir şey deneyebilirsiniz changeset'a ulaşmak için herhangi bir ihtiyaç olmayabilir.

Bu yardımcı olur umarım!