Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Преобразование пустых строк в nil перед сохранением

Автор вопроса: wintermeyerОтветов: 1

У меня есть следующая модель User, и я хочу убедиться, что никто не хранит пустые строки (например, пробел) в базе данных. Если кто-то вводит " " (несколько пробелов) для first_name, last_name или nickname, этот атрибут должен быть сохранен со значением nil. В Rails я бы решил эту проблему с помощью обратного вызова before_validation. Как лучше всего решить эту проблему в Фениксе?

defmodule MyApp.User do
  use MyApp.Web, :model

  schema "users" do
    field :first_name, :string
    field :last_name, :string
    field :nickname, :string

    timestamps
  end

  @required_fields ~w()
  @optional_fields ~w(first_name last_name nickname)

  @doc """
  Creates a changeset based on the `model` and `params`.

  If no params are provided, an invalid changeset is returned
  with no validation performed.
  """
  def changeset(model, params \\ :empty) do
    model
    |> cast(params, @required_fields, @optional_fields)
  end
end
  • Вы используете plug :scrub_params, "user", ... в UserController? Dogbert 30.04.2016
  • Да. aaaahhh... stackoverflow.com/questions/33975229/ Спасибо! wintermeyer 30.04.2016
  • @Dogbert Не могли бы вы опубликовать это как ответ? NoDisplayName 30.04.2016

phoenix-frameworkelixir

Ответы

Ответ 1 · рейтинг 4 · Dogbert

Рекомендуется обрабатывать это в контроллере с помощью плагина scrub_params, который рекурсивно преобразует пустые строки (в том числе состоящие только из пробелов) в nils для заданного ключа.

Генераторы Phoenix вставляют следующий код в сгенерированный контроллер (если контроллер называется UserController):

plug :scrub_params, "user" when action in [:create, :update]

Вы могли бы использовать что-то подобное.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы