win*_*yer 1 elixir phoenix-framework
我有以下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
Run Code Online (Sandbox Code Playgroud)
推荐的方法是在控制器中使用scrub_params插件来处理此问题,该插件递归地将空字符串(包括仅由空格组成的字符串)转换为nil给定键的 s 。
Phoenix 生成器在生成的控制器中插入以下代码(如果控制器名为UserController):
plug :scrub_params, "user" when action in [:create, :update]
Run Code Online (Sandbox Code Playgroud)
你可以使用类似的东西。