2015-10-24 11 views
10

Bir Phoenix uygulamasında (Elixir kullanarak) parazitlerin belirli bir tuşa sahip olup olmadığını kontrol etmenin bir yolunu bulmaya çalışıyorum.Elixir harita boş olup olmadığını kontrol edin ve anahtar var

Bir modelde aşağıdaki değişiklik kümesi işlevinde, params varsayılan olarak: boş.

def changeset(model, params \\ :empty) do 

Adında bir anahtar varsa: hashta kullanıcı adı var mı diye anlamaya ihtiyacım var.

cevap

12

Sadece küçük bir terminoloji şey, param bir harita değil, bir karma. Bu, belgelere nereye bakılacağını bilirken önemlidir.

Bir harita için true veya false numaralarını döndüren has_key?/2 vardır. Bir Ecto changeset kullandığımız için

Map.has_key?(params, :name) 

o zaman da Ecto.Changeset.get_change/3 kullanabilirsiniz.

get_change(changeset, key, default \\ nil) 

Bu ayarlanmamış defaultkey eğer döner. Lütfen key'un nil olarak ayarlanmış olması durumunda nil'un geri dönüleceğini unutmayın. Değişikliğiniz için nil izin verilen bir değerse, farklı bir varsayılan parametre ayarlamak isteyebilirsiniz.

9

Gazeler'ın yanıtı gerçekten çok iyi. Ben sadece mixenix ile değil, Elixir'in herhangi bir yerinde herhangi bir harita ile çalışan, sadece bana benzediği gibi, desen eşleme eklemek istiyorum.

# head-only declaration for default params 
def changeset(model, params \\ :empty) 

def changeset(model, %{"username" => _} = params) do 
    # username field is in params 
end 

def changeset(model, params) do 
    # username is not in params 
end