android - 如何更改 phoenix/Elixir 中的数据验证?
问题描述
我没有开发经验,这不是我的第一语言,对不起。
我正在使用 Elixir/Phoenix 后端的移动应用程序,当一个人想要创建一个新帐户时,系统需要 5 个信息来创建一个新帐户(电子邮件、cpf、姓名、电话号码、密码)。
在我的新注册流程中,我只想请求 2 个数据(电子邮件和密码),稍后使用应用程序用户可以完成丢失的数据,因此我的系统必须能够创建一个此数据为空的帐户。
首先我去我的结构数据库检查它是否不允许数据为空,你怎么能看到它没有发生:
CREATE TABLE users (
id bigint NOT NULL,
email character varying(255),
cpf character varying(255),
phone_number character varying(255),
password character varying(255),
inserted_at timestamp without time zone NOT NULL,
updated_at timestamp without time zone NOT NULL,
name character varying(255)
);
所以我去检查我的 user.ex 文件,看看执行数据验证的函数是否不允许它们为空,我发现了这个:
def changeset(%User{} = user, attrs) do
user
|> cast(attrs, [:email, :cpf, :name, :phone_number, :password])
|> validate_required([:email, :cpf, :name, :phone_number, :password])
|> validate_format(:email, ~r/^[A-Za-z0-9._%+-+']+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/)
|> validate_format(:cpf, ~r/([0-9]{2}[\.]?[0-9]{3}[\.]?[0-9]{3}[\/]?[0-9]{4}[-]?[0-9]{2})|([0-9]{3}[\.]?[0-9]{3}[\.]?[0-9]{3}[-]?[0-9]{2})/)
|> validate_cpf(:cpf)
|> unique_constraint(:email)
|> unique_constraint(:cpf)
|> unique_constraint(:phone_number)
|> update_password_hash()
|> update_activation_code()
end
我相信我需要更改此功能以允许系统在没有所有这些数据的情况下创建一个帐户,并且在创建帐户后,用户可以从应用程序内完成他们的数据,但我不确定我该怎么做,可以有人帮我吗?
解决方案
如果该字段不是必需的,则应将其从validate_required中删除。
所以你的变更集功能应该变成
def changeset(%User{} = user, attrs) do
user
|> cast(attrs, [:email, :cpf, :name, :phone_number, :password])
|> validate_required([:email, :password])
|> validate_format(:email, ~r/^[A-Za-z0-9._%+-+']+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/)
|> validate_format(:cpf, ~r/([0-9]{2}[\.]?[0-9]{3}[\.]?[0-9]{3}[\/]?[0-9]{4}[-]?[0-9]{2})|([0-9]{3}[\.]?[0-9]{3}[\.]?[0-9]{3}[-]?[0-9]{2})/)
|> validate_cpf(:cpf)
|> unique_constraint(:email)
|> unique_constraint(:cpf)
|> unique_constraint(:phone_number)
|> update_password_hash()
|> update_activation_code()
end
推荐阅读
- neo4j - 如何在 Cypher 中使用复杂的嵌套查询
- sql - SQL Server中一个奇怪的操作问题:-100/-100*10 = 0
- python - .iconbitmap 给出 TclError: bitmap "*.ico" not defined
- java - 无法在 Java 项目中使用 JMatI/O 库红色 .mat 文件
- java - 映射@Entity时出现UnsatisfiedDependencyException beancreationerror
- vhdl - 实现开放收集器和“z”数据类型
- ios - 具有不同配置的 iOS TestFlight
- html - 知道是否允许表单下的链接
- http - 对 api nativescript vue 的 http post 请求
- mysql - 如何处理 spring-boot 休眠问题中的电流更新?还需要使应用程序可扩展