[我正在尝试找出一种方法来检查Phoenix应用程序中的params哈希(使用Elixir)是否具有特定键。
在模型的以下changeset函数中,参数默认为:empty。
def changeset(model, params \\ :empty) do
我需要弄清楚哈希中是否存在名为:username的键。
只是一个小的术语,params是一个映射,而不是一个哈希。当知道在文档中查找位置时,这是相关的。
对于地图,有has_key?/2返回true
或false
。
Map.has_key?(params, :name)
因为您正在使用Ecto变更集,所以您也可以使用Ecto.Changeset.get_change/3。
get_change(changeset, key, default \\ nil)
如果未设置default
,则返回key
。请注意,如果key
设置为nil
,则仍会返回nil
。如果nil
是您更改的允许值,则您可能需要设置其他默认参数。
Gazeler的答案显然非常好。在我看来,我只会在混合中添加模式匹配,这是最清晰的解决方案,不仅适用于凤凰,而且适用于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