zoukankan      html  css  js  c++  java
  • Ruby on Rails Tutorial 第六章笔记 用户建模

    6. 用户建模

    这一章作者通过建立,完善 app/models/user.rb(即 User 模型),进而讲述了关于建立 data model(数据模型)的相关知识.

    建立 model 和 object 的过程

    原理: Rails 通过 Active Record 来与数据库进行交互,这样,不必使用数据库的结构化查询语言(SQL), 就可以对创建、删除、修改模型.
    新建 model 命令:
    rails generate model <ModelName> <AttributeName>
    其中, <ModelName>是模型的名字, <AttributeName> 是该模型的属性的名称(即列名).
    进行迁移
    创建 model 之后,还未将改动在数据库层进行,因此需要执行迁移命令. 迁移命令为 rails db:migrate
    创建、修改、查找、删除用户对象
    数据库层进行改动之后,就可以创建该模型的对象了.以下为各种命令的格式:

    • 创建对象: <ModelName>.new,例如 User.new 就是新建一个 User 对象.
    • 保存对象(将对象存入数据库): <ObjectName>.save例如 执行 user = User.new 之后,执行 user.save.
    • 获取对象的属性值:<ObjectName>.<AttributeName>,例如: user.name 是获取 user 的 name 属性的值
    • 删除对象: <ObjectName>.destroy 例如: user.destroy 是删除 user 这个 object.
    • 查找对象: <ModelName>.find 默认通过 object 的 id 来查找用户,也可以通过 <ModelName>.find_by通过属性查找用户
    • 更新用户属性值: 通过 <ObjectName>.update_attribute(:AttributeName, "Value") 更新单个值,也可通过 <ObjectName>.update_attributes(AttributeName1: "Value", AttributeName1: "Value") 更新多个值.

    进行验证

    当新建模型,对应的属性的值的有效性应该得到保障,有四类可以验证的规则:

    1. 存在性验证
    2. 长度验证
    3. 格式验证
    4. 唯一性验证

    这些验证,都在 app/model/<ModelName>.rb 中通过 validates 方法进行设定.

    存在性验证:
    格式: 
    validates :<AttributeName>, presence: true
    说明: validates 是 Rails 的内置方法,其接受的第一个参数是属性的符号名,第二个参数是 optional 的散列,在这里为 presence: true.
    长度验证
    格式: 
    validates :<AttributeName>, length: {maxmum: 50 }
    说明: length 为验证参数, 其具有限制上限的 maxium 参数.
    格式验证
    格式:
    VALID_<ATTRIBUTE_NAME>_REGEX = regex expression
    validates :<AttributeName>, format: {with: VALID_<ATTRIBUTE_NAME>_REGEX}
    唯一性验证:
    格式:
    validates :<AttributeName>, uniqueness: true
    如果要为不区分大小写的话, 那么应该增改为
    unqueness: { case_sensitive: false }
    但是添加之后,仍然存在可能会在数据库创建重复 object 的可能性的缺陷,因此应该也在数据库层中保证唯一,并且为了提高查找的速度,添加索引.
    方法是生成迁移文件: rails generate migration add_index_to_users_email
    并在迁移文件中加上:
    add_index :users, :email, unique: true
    这样就能确保在数据库层中 email 是唯一的,并且为 user 和 email 建立索引.

    添加安全密码

    添加安全密码使用一个 Rails 方法就可以实现,这个方法是 has_secure_password. 其工作原理如下:

    1. 在数据库中用 password_digest 列储存安全密码的哈希值
    2. 在数据对象中创建一对虚拟属性: password 和 password_confirmation(虚拟属性是在模型对象中有属性,但是在数据库中没有对应的列)
    3. 获得 authenticate 方法,输入值为密码,如果密码正确,那么返回用户对象(即返回 true)

    前提1
    该方法需要使用 gem 'bcrypt' ,因此需要在 Gemfile 中添加并安装.
    前提2
    have_secure_password
    生成一个数据迁移文件: rails generate migration add_password_to_users password_digest: string
    然后在迁移文件中加入:
    add_column :users, :password_digest, :string
    然后进行迁移
    操作
    在 modles/user.rb 中直接添加一行 has_secure_password.即可完成添加安全密码.

  • 相关阅读:
    Code Generation and T4 Text Templates
    Pros and Cons of T4 in Visual Studio 2008
    PSPInstance Object | Web Python
    Mod_Python中文文档
    [Medusa-dev] psp_handler
    Difference Between Mod_Python & Mod_Wsgi | eHow
    Mod_python: The Long Story
    HOWTO Use Python in the web — Python v3.0.1 documentation
    Js~对数组进行分组户数
    大叔也说并行和串行`性能提升N倍(N由操作系统位数和cpu核数决定)
  • 原文地址:https://www.cnblogs.com/FBsharl/p/11426481.html
Copyright © 2011-2022 走看看