Bu küçük sanitasyon fonksiyonunda bir Phoenix/Elixir uygulamasında, kullanıcı bir e-posta girmediğinde sorun yaşıyorum.Yapı koruma maddelerindeki yapıların değerleri nasıl test edilir?
Verileri ele almak için bir yapı kullanıyorum. Ve basit bir sanitasyon işlevi (şimdilik) sadece boşlukları keser ve yapıyı günceller (harita). Şimdiye kadar iyi çalıştı, ancak email
alanı nil
olduğunda, bir hata alıyorum.
** (FunctionClauseError) no function clause matching in String.Unicode.strip/1
Yani bu durumda kontrol etmek için bir bekçi maddesini tanıtıldı ve sonra yalnızca kullanıcı adı sterilize.
defmodule MyApp.User do
defstruct username: nil, email: nil, password: nil, hashed_password: nil
# Sanitizing input without guard clause
def sanitize_user(user)do
%{user | username: String.strip(user.username), email: String.strip(user.email)}
end
# Sanitizing input with guard clause
def sanitize_user(user) when is_nil(user.email) do
%{user | username: String.strip(user.username)}
end
def sanitize_user(user) when is_binary(user.email) do
%{user | username: String.strip(user.username), email: String.strip(user.email)}
end
end
Şimdi derleme zamanında bir hata alıyorum:
** (CompileError) web/models/user.ex:54: cannot invoke remote function Access.get/2 inside guard
ben bu alan için derleme zamanını mevcut değildir çünkü sanırım. Ya da böyle bir şey.
Bu nasıl çözülür? Koruma maddelerindeki yapıların değerleri nasıl test edilir?
Teşekkürler! Bu çözüldü. Btw. İkinci fonksiyon tanımında bir yazım hatası var (ilk çözümden). Bir açıklık var (çok fazla. –
İyi nokta. Yazım hatası düzeltildi.) – Gazler
@OleSpaarmann: Bu cevabı çözülmüş olarak işaretlemek Gazler için daha güzel olurdu. – raarts