2015-10-24 77 views
10

我想弄清楚一種方法來檢查Phoenix應用程序(使用Elixir)中的參數哈希是否具有特定的密鑰。Elixir映射檢查是否爲空並且存在密鑰

在模型中的下面的changeset函數中,參數缺省爲:空。

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

我需要弄清楚是否存在一個名爲:username的密鑰。

回答

12

只是一個小術語的東西,params是一個地圖,而不是散列。當知道在文檔中查找的位置時,這是相關的。

有地圖的有has_key?/2,它返回truefalse

Map.has_key?(params, :name) 

由於您使用的是Ecto變更集,因此您也可以使用Ecto.Changeset.get_change/3

get_change(changeset, key, default \\ nil) 

這將返回default如果key沒有設置。請注意,如果key設置爲nil,則仍會返回nil。如果nil是您更改的允許值,那麼您可能需要設置不同的默認參數。

9

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