我有以下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
答案 0 :(得分:4)
推荐的方法是使用scrub_params
插件在控制器中处理此问题,该插件以递归方式将空字符串(包括仅由空格组成的字符串)转换为给定键的nil
。
Phoenix生成器在生成的控制器中插入以下代码(如果控制器名为UserController
):
plug :scrub_params, "user" when action in [:create, :update]
你可以使用类似的东西。