2015-11-28 14 views
21

Phoenix scrub_params yönteminin belgelendirmesi bana biraz açık değildir. Bu işlevsellik Rails güçlü parametreler özelliği benzer gibi görünüyor. EğerPhoenix'in scrub_params'ı Rails'in güçlü parametreleri gibi mi?

plug :scrub_params, "user" when action in [:create] 

, şöyle bir denetleyici kullanmak Ancak, ... açıkça Beyaz listeye almak istediğiniz parametreleri hangi belirten değiliz. scrub_params koduna baktım ama Elixir ile neler olup bittiğini tam olarak bilmediğim kadar açık değilim.

Bu yöntem yalnızca modele bakmak ve beyaz liste parametreleri için gerekli ve isteğe bağlı field module özniteliklerini kullanmak mıdır? Ayrıca, "scrub_params belgelerine" required_key'in mevcut olup olmadığını kontrol eder "şeklinde de yazıyor. "Gerekli anahtar" nedir? Bu modelden sadece gerekli alanlar mı?

cevap

35

scrub_params/2 işlevi, Rails'in güçlü parametreleri gibi değil. Ecto'da, Ecto.Changeset.cast/4'u kullanarak changeset işlevinizdeki izin verilen anahtarı tanımlarsınız.

  • gerekli anahtar mevcut olmadığından emin olun:

    Scrub parametreleri aşağıdakileri yapar. çağıran Örneğin nil

için gerekli anahtar ile params haritadan

  • Değişim boş değerlerini kullanır:

    plug scrub_params "user" 
    

    "kullanıcı" anahtarının varlığını kontrol eder. the docs:

    required_key mevcut değilse, Phoenix.MissingParamError değerini yükseltir.

    Eğer benzeyen bir params harita varsa:

    %{"user" => %{"name" => "foo", "age" => ""}} 
    

    Ardından "yaş" parametresi nil dönüştürülebilir olacaktır. Ecto.Changeset.cast/4 fonksiyon gerekli alanları bir dizi ve opsiyonel bir dizi alır beri, sadece Ecto ile iyi çalışır

    def create(conn, %{"user" => user_params}) do 
        User.changeset(user_params) 
    end 
    

    scrub_params/2 modeliniz ile hiçbir ilişkisi yoktur: Bu parametreleri içeren doğrudan değişiklik kümesi işlevi çağırmak için izin verir alanlar. nil'un gerekli bir alana geçirilmesi, değişiklik kümesini geçersiz kılacak ve alan için bir hata ekleyecektir.

  • +0

    Açıklama için teşekkürler. Bu mantıklı. –

    +0

    Phoenix'teki güçlü paramikliklerin karşılığı nedir? Kullanıcı girişini kısıtlamam lazım. [Buradaki soruma] bir yanıt verdiğiniz için teşekkür ederiz. (Http://stackoverflow.com/questions/39938824/elixir-phoenix-restrict-params-like-rails-strong-params) Teşekkürler. –