【Phoenix】3、Schema 的学习

  1、我们切到 hello 目录下,在这个文件夹的根路径打开 终端/cmd。

  2、在之前的文章中,我们已经通过命令创建了一个 users 数据表。如果没有,请翻回之前的查看怎么创建。

  3、我们可以在下图中,看到 ecto 帮我们创建的 文件内容 如下:(这是简单的 Elixir 结构)

  

  4、下面,我们来了解 schema 中的字段的用法,在官网中的大概意思是,schema 中的 changeset 和 validations 是用来做验证的,也是用户的输入 的内容做验证,验证通过了才会插入到数据之类的功能吧,如下:

// %User{} = user 这个 跟上图有点区别,但其实功能什么都是一样的。
def changeset(%User{} = user, attrs) do
  user
  |> cast(attrs, [:name, :email, :bio, :number_of_pets])
  |> validate_required([:name, :email, :bio, :number_of_pets])
end

  

  5、刚刚 我们在 hello 的根目录下打开了 终端/cmd,现在我们用一下命令进入到 Elixir 的运行环境中

// 像执行 mix 服务一样进入(-S 中的 S 要大写),我个人是这样认为的
$ iex -S mix

// 进入到 名为 user 的 schema 中,这一步必须进入,不然我们下面调用不到 User 这个 schema。(大概就这个意思了,有错欢迎提出)。
iex> alias Hello.User

  6、输入 iex> 后面的命令: changeset = User.changeset(%User{}, %{});

// %{} 这传入的变化集,%User{} 这个,应该是调用那个验证。
iex> changeset = User.changeset(%User{}, %{})

// 下面是输出的信息,我们上面提交了空白的集合,下面的错误提示,就是不能为空白
#Ecto.Changeset<action: nil, changes: %{},
 errors: [name: {"can‘t be blank", [validation: :required]},
  email: {"can‘t be blank", [validation: :required]},
  bio: {"can‘t be blank", [validation: :required]},
  number_of_pets: {"can‘t be blank", [validation: :required]}],
 data: #Hello.User<>, valid?: false>

  

  7、当我们有了变更集,我们就可以查看 它 是否有效,无效返回的是 false,有效返回的是 true。

// changeset 是我们上面定义的值(在 Elixir 中,好像不能说定义,具体自己看 Elixir 的语法)
// valid? 中的 ? 号要带上
iex> changeset.valid?

   

  8、接下来我们把 user.ex 文件中 validate_required 中的 :number_of_pets 删掉,再进行验证,验证之前,重新加载一下:

iex> recompile()

  9、再验证

iex> changeset = User.changeset(%User{}, %{})

// 我们可以看到下面的报错信息,少了 number_of_pets 这个字段的报错
#Ecto.Changeset<action: nil, changes: %{},
 errors: [name: {"can‘t be blank", [validation: :required]},
  email: {"can‘t be blank", [validation: :required]},
  bio: {"can‘t be blank", [validation: :required]}],
 data: #Hello.User<>, valid?: false>

  

  10、我们 定义一个 集合 去进行验证,这里会额外定义一个不存在 在 User 这个 schema 中的字段。

iex> params = %{name: "Joe Example", email: "joe@example.com", bio: "An example to all", number_of_pets: 5, random_key: "random value"}

  

  11、使用上面的字段,进行验证,是可以通过验证的,自己使用 valid? 查看

iex> changeset = User.changeset(%User{}, params)

  

  12、但我们 查看到变化的值有哪些,其中不包括 额外的值 random_key,因为在验证的时候,已经把它移除了。

  13、我们知道 validate_required 是 验证数据是否为空的,下面还有是验证其他规则的(更多规则):

def changeset(%User{} = user, attrs) do
  user
  |> cast(attrs, [:name, :email, :bio, :number_of_pets])
  |> validate_required([:name, :email, :bio, :number_of_pets])
  // 验证 bio 中的值的长度,不能少于 2
  |> validate_length(:bio, min: 2)
  // 验证 bio 中的值得长度,不能大于140
  |> validate_length(:bio, max: 140)
  // 验证 email 中 @ 这个符号要存在。
  |> validate_format(:email, ~r/@/)
end    

原文地址:https://www.cnblogs.com/-xk94/p/10471635.html

时间: 2024-10-07 07:03:23

【Phoenix】3、Schema 的学习的相关文章

XSD(XML Schema Definition)学习笔记

今天学习了XSD相关的知识,为了以后查找的方便,写一些笔记. 一.什么是XSD? 1.XSD全称:XML Schema Definition.XML Schema 的作用是定义 XML 文档的合法构建模块,类似 DTD.XML Schema: 定义可出现在文档中的元素 定义可出现在文档中的属性 定义哪个元素是子元素 定义子元素的次序 定义子元素的数目 定义元素是否为空,或者是否可包含文本 定义元素和属性的数据类型 定义元素和属性的默认值以及固定值 XML Schema 在 2001 年 5 月

xml与xml schema命名空间学习

首先,xml与xml schema(xsd)文件都是xml格式的文件,都遵循相同的命名空间规则 在schema元素中通过xmlns指定约束文件位置 如下面的xsd文件中的代码 <?xml version="1.0" encoding="UTF-8"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example

solr配置schema.xml学习

solr创建索引.添加数据的关键是配置schema.xml文件,该文件中主要是完成配置数据源.索引字段.数据类型等定义.同时,该文件的配置直接影响到solr搜索的效率和准确性. 一.搜索类型FileType name:指的是FileType的名字 class:指向org.apache.solr.analysis包里面对应的class名称,用来定义这个类型的行为 <types> <fieldType name="string" class="solr.StrF

xml 配置文件规范 校验

背景:做的数据同步框架,数据同步种类通过xml配置文件添加.为了系统的稳定性,我们只能认为将来写这个运行配置xml的人是一个傻瓜,那么对xml格式校验就很重要. 通过dom4j,是可以完成对xml格式的校验.但是代码实现冗长,不便阅读和维护.而且后面校验格式一旦修改,代码方面的修改就是牵一发而动全身.看着实在蛋疼,于是为了“偷懒”,我弃用了别人实现的dom4j校验xml数据格式的方法. 通过在网络上查阅,发现对xml格式校验的常用方法:①DTD语法:②xml schema语法. 下面是关于DTD

Oracle Database Sample Schemas

本文在Creative Commons许可证下发布 最近在钻研Oracle 11gR2,写SQL缺乏Demo表,研究他家的官方资料时发现一块甲骨文已经给我们准备Sample Schemas.比如说SCOTT Schema下有两张最广为人知的Demo表(EMP and DEPT),其实除了SCOTT这个Sample Schema,Oracle还OEM了几个比较复杂的Sample Schema用于学习. 小伙伴们可以直接拿来学习写SQL练手.吼吼-.. HR Schema:The Human Res

XML解析器

一.操作XML文档概述 1.如何操作XML文档 XML文档也是数据的一种,对数据的操作也不外乎是"增删改查".也被大家称之为"CRUD" C:Create: R:Retrieve: U:Update: D:Delete 2.XML解析技术 XML解析方式分为两种:DOM(Document Object Model)和SAX(Simple API for XML).这两种方式不是针对Java语言来解析XML的技术,而是跨语言的解析方式.例如DOM还在Javascrip

dubbo的服务提供者provider启动的一些理解

dubbo的demo中的provider实现很简单,1.接口如下: package com.alibaba.dubbo.demo; public interface DemoService { String sayHello(String name); } 2.实现类: package com.alibaba.dubbo.demo.provider; import com.alibaba.dubbo.demo.DemoService; import com.alibaba.dubbo.rpc.R

疯狂XML学习笔记(7)-----------XML Schema

XML Schema 是基于 XML 的 DTD 替代者. XML Schema 可描述 XML 文档的结构. XML Schema 语言也可作为 XSD(XML Schema Definition)来引用. 您应当具备的基础知识 在继续学习之前,您需要对下面的知识有基本的了解: HTML / XHTML XML 以及 XML 命名空间 对 DTD 的基本了解 如果您希望首先学习这些项目,请在 首页 访问这些教程. 什么是 XML Schema? XML Schema 的作用是定义 XML 文档

20140602-XML之Schema文档学习笔记

20140602-XML之Schema文档学习笔记 一.Schema约束 几个重要知识: 1.namespace 相当于schema文件的id.Namespace是一个概念,并没有这个属性. 2.targetNamespace属性 注意:这个属性只在schema文档中出现.用来指定schema文档的namespace的值. 3.xmlns属性(非常重要,用于引入一个约束) 引入一个约束,它的值是一个schema文档的targetNamespace值(确切地说,是targetNamespace的属