フェニックスのアプリケーション(Elixirを使用)で特定のキーがあるかどうかを確認する方法を見つけようとしています。エリクシールマップチェックが空でない場合キーが存在する
モデルの以下のチェンジセット機能では、paramsのデフォルトは空です。
def changeset(model, params \\ :empty) do
という名前のキーがハッシュ内に存在するかどうかを判断する必要があります。
フェニックスのアプリケーション(Elixirを使用)で特定のキーがあるかどうかを確認する方法を見つけようとしています。エリクシールマップチェックが空でない場合キーが存在する
モデルの以下のチェンジセット機能では、paramsのデフォルトは空です。
def changeset(model, params \\ :empty) do
という名前のキーがハッシュ内に存在するかどうかを判断する必要があります。
小さな用語だけですが、paramsはハッシュではなくマップです。これは、ドキュメンテーションのどこを調べるかを知るときに関係します。
has_key?/2は、true
またはfalse
を返します。
Map.has_key?(params, :name)
Ectoチェンジセットを使用しているので、Ecto.Changeset.get_change/3も使用できます。
get_change(changeset, key, default \\ nil)
key
が設定されていない場合、これはdefault
を返します。 key
がnil
に設定されている場合は、nil
が返されます。 nil
が変更の許容値である場合は、別のデフォルトパラメータを設定することができます。
ガゼラーの答えは明らかに本当に良いです。それは私には思われるように、パターンマッチングを追加するだけです。それはフェニックスだけでなくElixirの任意のマップで動作する、最も明白な解決策です。
# 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