2015-06-07 15 views
7

POST'a veri oluşturmak için istediğim bir phoenix rotası var, bununla birlikte, formun son kullanıcı tarafından oluşturulduğu yaklaşık 4 alan var (form son kullanıcı tarafından oluşturuldu ve bu nedenle bu alanlar Bunu nasıl ele POST verisindeki) güzergahın Phoenix kontrolörü olarakElixir Phoenix'te isteğe bağlı POST parametreleri

, var olmayan? Örneğin

:

Benim formu

Field1, 
Field2 
Field3 (optional) 
Field4 (optional) 
Field5 (optional) 

sahiptir Ve formu deftere nakil daima Field1 ve Field2 olmalıdır ancak diğer alanların herhangi kombinasyonuna sahip olabilir.

yani benim denetleyicisi kodu şimdiye kadar şu şekildedir:

def create(conn, %{"field1" => field1, "field2" => field2) do 
end 

nasıl diğer 3 isteğe bağlı yapabilirim? Eğer hepsini eklediysem o zaman gerekli olacak ve potansiyel gönderilen formların her biri için fazla işlev gördüğünden dolayı bir işlev yapmak istemiyorum. denetleyici tarafından alınan

cevap

19

parametreler sadece bir harita, böylece muhtemelen Map.get/3 gibi bir şey arıyoruz. Bu fonksiyonla, bu satırlar bir şey yapabilirsiniz:

def create(conn, %{"field1" => f1, "field2" => f2} = params) do 
    f3 = Map.get(params, "field3", "my default value") 
    # similar for the other fields 
end 

Ayrıca Map.merge/2 isteğe bağlı parametreler için tüm varsayılan değerleri içeren bir harita oluşturmak ve sonra kullanabilirsiniz:

@optional_params %{"field3" => "default3", "field4" => "default4"} 

def create(conn, %{"field1" => f1, "field2" => f2} = params) do 
    # `params` has precedence over `@optional_params`, that's why we're using it 
    # as the second argument here. 
    params = Map.merge(@optional_params, params) 
end 
+0

Teşekkür çok, çok açık, şimdi yayınladın :) – TheStoneFox

İlgili konular