Pra*_*oya 15 elixir ecto phoenix-framework
我试图找出一种方法来检查凤凰应用程序(使用Elixir)中的params散列是否具有特定的密钥.
在模型中的以下变更集功能中,参数默认为:空.
def changeset(model, params \\ :empty) do
Run Code Online (Sandbox Code Playgroud)
我需要弄清楚哈希中是否存在名为:username的密钥.
Gaz*_*ler 19
只是一个小术语,params是一个地图而不是哈希.知道在文档中查找的位置时,这是相关的.
对于地图,有has_key?/ 2返回true
或false
.
Map.has_key?(params, :name)
Run Code Online (Sandbox Code Playgroud)
由于您使用的是Ecto变更集,因此您也可以使用Ecto.Changeset.get_change/3.
get_change(changeset, key, default \\ nil)
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11565 次 |
最近记录: |