Эликсирная карта проверяет, нет ли пустого и существует ключ
Я пытаюсь выяснить способ проверки, имеет ли хэш параметров в приложении Phoenix (с использованием Elixir) определенный ключ или нет.
В приведенной ниже функции набора параметров в модели параметрам по умолчанию присваивается значение: empty.
def changeset(model, params \\ :empty) do
Мне нужно выяснить, существует ли в хеше ключ с именем: username.
Ответы
Ответ 1
Просто небольшая терминологическая вещь, 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
является допустимым значением для вашего изменения, вы можете установить другой параметр по умолчанию.
Ответ 2
Ответ Газелера, очевидно, действительно хорош. Я бы добавил только сочетание шаблонов в микс, как мне кажется, это самое четкое решение, которое работает не только с фениксом, но и с любой картой в любом месте в Эликсире.
# 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