rails帮助命令

rails -h

创建user模型

命令行

haima@haima-PC:/media/haima/34E401CC64DD0E28/site/go/src/ruby/circles$ rails g model user
Running via Spring preloader in process 30704
invoke active_record
create db/migrate/20210110133050_create_users.rb
create app/models/user.rb
invoke test_unit
create test/models/user_test.rb
create test/fixtures/users.yml

注意

这里注册模型的名字是单数的形式(user),

而数据库表的名字是会自动创建为复数所形式(users)

编写users表迁移文件

编写表迁移文件 20210110133050_create_users.rb

class CreateUsers < ActiveRecord::Migration[6.1]
def change
create_table :users do |t|
t.string :username
t.string :password
t.timestamps null:false
end
end
end

迁移 users

执行 rails db:migrate 或者 rake db:migrate都可以,

注意

执行后会,会创建没有被迁移的表

已经创建过的表不会再次被创建

haima@haima-PC:/media/haima/34E401CC64DD0E28/site/go/src/ruby/circles$ rails db:migrate
== 20210110133050 CreateUsers: migrating ======================================
-- create_table(:users)
-> 0.0757s
== 20210110133050 CreateUsers: migrated (0.0758s) =============================

从下图片看到已经创建成功了

会在数据表(schema_migrations)中创建一条和迁移文件名一样的记录,说明已经迁移过

回滚数据库:

rails db:migrate #回滚最后一次迁移的数据表

rake db:rollback STEP=n #回滚最后n次迁移的数据表

rake db:migrate:down VERSION=20210622161900 #回滚指定版本号迁移的数据表(指定迁移的文件名)

控制台操作user表

增/删/改/查

haima@haima-PC:/media/haima/34E401CC64DD0E28/site/go/src/ruby/circles$ rails console #进入控制台
Running via Spring preloader in process 3956
Loading development environment (Rails 6.1.1)
3.0.0 :001 > User #选择user表
=> User (call 'User.connection' to establish a connection)
3.0.0 :002 > User.create username:'zhangshan',password:'123456' #创建一条记录
TRANSACTION (0.5ms) BEGIN
User Create (0.4ms) INSERT INTO `users` (`username`, `password`, `created_at`, `updated_at`) VALUES ('zhangshan', '123456', '2021-01-10 14:06:14.558342', '2021-01-10 14:06:14.558342')
TRANSACTION (16.7ms) COMMIT
=> #<User id: 1, username: "zhangshan", password: [FILTERED], created_at: "2021-01-10 14:06:14.558342000 +0000", updated_at: "2021-01-10 14:06:14.558342000 +0000">
3.0.0 :003 > User.all.to_a #查询所以记录
User Load (0.8ms) SELECT `users`.* FROM `users`
=> [#<User id: 1, username: "zhangshan", password: [FILTERED], created_at: "2021-01-10 14:06:14.558342000 +0000", updated_at: "2021-01-10 14:06:14.558342000 +0000">]
3.0.0 :006 > user = User.first #查询第一条记录并赋值给user变量
User Load (0.5ms) SELECT `users`.* FROM `users` ORDER BY `users`.`id` ASC LIMIT 1
=> #<User id: 1, username: "zhangshan", password: [FILTERED], created_at: "2021-01-10 14:06:14.558342000 +0000", updated_at: "2021-01-10 14:06:14.558342000 +0000">
3.0.0 :007 > user
=> #<User id: 1, username: "zhangshan", password: [FILTERED], created_at: "2021-01-10 14:06:14.558342000 +0000", updated_at: "2021-01-10 14:06:14.558342000 +0000">
3.0.0 :008 > user.id #打印id
=> 1
3.0.0 :009 > user.username #打印username
=> "zhangshan"
3.0.0 :010 > user.username = 'lisi' #给username重新赋值
=> "lisi"
3.0.0 :011 > user.save #修改user.id = 1的这条数据的`username` = 'lisi'
TRANSACTION (0.3ms) BEGIN
User Update (2.9ms) UPDATE `users` SET `users`.`username` = 'lisi', `users`.`updated_at` = '2021-01-10 14:10:54.782612' WHERE `users`.`id` = 1
TRANSACTION (860.2ms) COMMIT
=> true
3.0.0 :013 > user.destroy #删除user.id = 1 的记录
TRANSACTION (0.3ms) BEGIN
User Destroy (0.4ms) DELETE FROM `users` WHERE `users`.`id` = 1
TRANSACTION (17.7ms) COMMIT
=> #<User id: 1, username: "lisi", password: [FILTERED], created_at: "2021-01-10 14:06:14.558342000 +0000", updated_at: "2021-01-10 14:10:54.782612000 +0000"> 3.0.0 :017 > User.create username:'zhangshan',password:'123456' #创建
TRANSACTION (0.2ms) BEGIN
User Create (0.4ms) INSERT INTO `users` (`username`, `password`, `created_at`, `updated_at`) VALUES ('zhangshan', '123456', '2021-01-10 14:20:48.808927', '2021-01-10 14:20:48.808927')
TRANSACTION (285.9ms) COMMIT
=> #<User id: 2, username: "zhangshan", password: [FILTERED], created_at: "2021-01-10 14:20:48.808927000 +0000", updated_at: "2021-01-10 14:20:48.808927000 +0000">
3.0.0 :018 > User.find(2) #查找id=2的数据
User Load (0.5ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 2 LIMIT 1

IDE操作

rails g model user name:string phone:string email:string gender:integer"

/bin/bash --login -c "export PATH=/home/haima/.rvm/rubies/default/bin:/home/haima/.rvm/rubies/ruby-2.3.8/bin:/home/haima/.rvm/rubies/ruby-2.3.8/lib/ruby/gems/2.3.0/bin:/home/haima/.gem/ruby/2.3.0/bin:$PATH && rails g model user name:string phone:string email:string gender:int"
invoke active_record
create db/migrate/20210622160851_create_users.rb
create app/models/user.rb
invoke test_unit
create test/models/user_test.rb
create test/fixtures/users.yml Process finished with exit code 0.

后台操作和上面的命令号里一样,迁移数据表

常用类型

class CreateTests < ActiveRecord::Migration[5.0]
def change
create_table :tests do |t|
t.string :name
t.string :phone ,null: false
t.string :email ,null: false,default:""
t.integer :gender ,default: 0
t.boolean :isadmin
t.string :category,limit: 2, index: true #1 :系统消息, 2: 社区消息 limit: 2创建后是varchar(2)
t.datetime :vip_duration # vip过期时间
t.decimal :value, precision: 8, scale: 2
t.boolean :is_agg, default: false
t.string :state, default: "init"
t.date :date
t.datetime :birthday t.timestamps null: false
end
add_index :tests, :phone #设置主键索引
add_index :tests, :email
end
end

生成表

CREATE TABLE `tests` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`phone` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL DEFAULT '',
`gender` int(11) DEFAULT '0',
`isadmin` tinyint(1) DEFAULT NULL,
`category` varchar(2) DEFAULT NULL,
`vip_duration` datetime DEFAULT NULL,
`value` decimal(8,2) DEFAULT NULL,
`is_agg` tinyint(1) DEFAULT '0',
`state` varchar(255) DEFAULT 'init',
`date` date DEFAULT NULL,
`birthday` datetime DEFAULT NULL,
`created_at` datetime NOT NULL,
`updated_at` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `index_tests_on_category` (`category`),
KEY `index_tests_on_phone` (`phone`),
KEY `index_tests_on_email` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

创建companies模型

1.命令行执行

rails g model company

2.编写迁移文件

class CreateCompanies < ActiveRecord::Migration[5.0]
def change
create_table :companies, comment: '公司信息表' do |t|
t.integer :company_sn, default: 0, comment: '公司编号'
t.string :company_name, default: '', comment: '公司名称'
t.timestamps
end
add_index :companies, [:company_sn], unique: true
end
end

创建company_ips模型

1.命令行执行

rails g model company_ips

2.编写迁移文件

class CreateCompanyIps < ActiveRecord::Migration[5.0]
def change
create_table :company_ips, comment: '公司ip表' do |t|
t.belongs_to :company, comment: '公司表主键id' #关联companies表 会自动生成company_id字段和索引
t.string :ip,:null => false, comment: '公司ip'
t.timestamps
end
add_index :company_ips, [ :company_id,:ip], unique: true, name: "index_company_ips_on_company_ids_on_ip"
end
end

执行迁移

haima@haima-PC:/media/haima/34E401CC64DD0E28/site/go/src/ruby/fofapro$ rake db:migrate
== 20210720091416 CreateCompanyIps: migrating =================================
-- create_table(:company_ips, {:comment=>"公司ip表"})
-> 0.0895s
-- add_index(:company_ips, [:company_id, :ip], {:unique=>true, :name=>"index_company_ips_on_company_ids_on_ip"})
-> 0.0713s
== 20210720091416 CreateCompanyIps: migrated (0.1612s) ========================

生成的表

CREATE TABLE `companies` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`company_sn` int(11) DEFAULT '0' COMMENT '公司编号',
`company_name` varchar(255) DEFAULT '' COMMENT '公司名称',
`created_at` datetime NOT NULL,
`updated_at` datetime NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `index_companies_on_company_sn` (`company_sn`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='公司信息表'; CREATE TABLE `company_ips` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`company_id` int(11) DEFAULT NULL COMMENT '公司表主键id',
`ip` varchar(255) NOT NULL COMMENT '公司ip',
`created_at` datetime NOT NULL,
`updated_at` datetime NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `index_company_ips_on_company_ids_on_ip` (`company_id`,`ip`),
KEY `index_company_ips_on_company_id` (`company_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='公司ip表';

编写关系模型

app/models/company.rb

class Company < ApplicationRecord

  validates :company_sn, presence: { message: "公司编号不能为空" }

  has_many :company_ips,dependent: :destroy

end

app/models/company_ip.rb

class CompanyIp < ApplicationRecord

  validates :company_id, presence: { message: "公司id不能为空" }
validates :ip, presence: { message: "公司ip不能为空" } belongs_to :company
end

07. rails 创建user模型的更多相关文章

  1. Fixflow引擎解析(三)(模型) - 创建EMF模型来读写XML文件

    Fixflow引擎解析(四)(模型) - 通过EMF扩展BPMN2.0元素 Fixflow引擎解析(三)(模型) - 创建EMF模型来读写XML文件 Fixflow引擎解析(二)(模型) - BPMN ...

  2. YII2框架动态创建表模型

    YII2框架动态创建表模型 在YII2中,每个表对应一个model类 在开发过程中,我们在填写一个大型表单的时候,表单里有N个select下拉列表,每个下拉select来自于不同的表: 如果要在程序里 ...

  3. 【ASP.NET Web API教程】2.3.2 创建域模型

    原文:[ASP.NET Web API教程]2.3.2 创建域模型 Part 2: Creating the Domain Models 第2部分:创建域模型 本文引自:http://www.asp. ...

  4. ruby on rails创建的页面訪问很慢

    ruby on rails创建的页面訪问很慢 用rvm安装的ruby1.9.3 解决:cd ~/.rvm/rubies/ruby-1.9.3-p547/lib/ruby/1.9.1/webrick v ...

  5. 简单Elixir游戏服设计-创建玩家模型

    删除model.ex 创建玩家模型 player.ex, 简单化,只有唯一标识,昵称,金币,够用了. 选择 map 代表数据,是为了扩展数据结构,方便增加功能.struct也是可以的. add_num ...

  6. simulink创建简单模型

    创建简单模型 您可以使用 Simulink® 对系统建模,然后仿真该系统的动态行为.Simulink 允许您创建模块图,图中的各个连接模块代表系统的各个部分,信号代表这些模块之间的输入/输出关系.Si ...

  7. 连接mysql数据库,创建用户模型

    1.安装与配置python3.6+flask+mysql数据库 (1)下载安装MySQL数据库 (2)下载安装MySQL-python 中间件 (3)pip install flask-sqlalch ...

  8. Chem 3D中怎么创建立体模型

    ChemDraw作为一款很受大家欢迎的化学绘图软件,其在绘制平面化学方面的功能已经非常的强大了,其实它也可以绘制3D图形.Chem 3D就是绘制3D图形的重要组件.而且为了满足不同的用户绘图的需求,可 ...

  9. Knockout v3.4.0 中文版教程-2-监控-通过监控创建视图模型(上)

    2. 监控 1.通过监控创建视图模型 1. 监控 Knockout是基于以下三个核心特性: 监控和依赖跟踪 声明式绑定 模板 在本节,你将第一次了解这三个特性,在这之前,我们先来了解以下MVVM模式和 ...

  10. 0626-TP整理二(调试模式,空操作,跨控制器调用,跨方法跳转--redirect(),框架语法,创建model模型)

    一.调试模式(入口文件:index.php) define('APP_DEBUG', true);  //调试模式 define('APP_DEBUG', FALSE);  //运行模式 开启日志信息 ...

随机推荐

  1. KingbaseESV8R6识别IO使用率过高

    前言 数据库正常运行离不开I/O的使用,在操作系统上,I/O又离不开存储的性能及使用方式,我们可以在存储层利用raid条带化技术使IOPS达到最佳性能. 本篇文章有助于确认数据库I/O使用率过高的原因 ...

  2. KingbaseES V8R6 备份恢复案例 -- 自定义表空间指定目录恢复

    ​ 案例说明: KingbaseES V8R6在通过sys_rman执行物理备份恢复时,可以通过参数'--kb1-path',指定恢复的数据(data)目录,但如果原备份中包含自定义表空间时,需要建立 ...

  3. 鸿蒙HarmonyOS实战-ArkUI组件(List)

    一.List 1.概述 列表是一种非常有用且功能强大的容器,它常用于呈现同类型或多类型数据集合,例如图片.文本.音乐.通讯录.购物清单等.列表对于显示大量内容而不耗费过多空间和内存是非常有帮助的,因为 ...

  4. QT 自定义插件问题 error: LNK2001: 无法解析的外部符号

    为了重复利用已有的代码,我使用自定义插件进行开发.当每个插件独立开发时没有遇到问题,但是当插件B引用了插件A时就会在编译时报错 error: LNK2001: 无法解析的外部符号. 例如,先定义一个插 ...

  5. 11 CSS盒子模型(重点)

    11 CSS盒子模型(重点) 盒模型是CSS的核心知识点之一,它指定元素如何显示以及如何相互交互.HTML页面上的每个元素都可以看成一个个方盒子,这些盒子由元素的content(内容).padding ...

  6. #排列组合#CF1550D Excellent Arrays

    洛谷传送门 CF1550D 分析 对于excellent的 \(a\) 来说 \(|a_i-i|=x\) 的值是固定的,考虑枚举它 一半正一半负时函数值是最大的,当 \(n\) 为奇数时要分为两种情况 ...

  7. 使用CMake启用RUNPATH特性

    使用CMake,启用RUNPATH特性,可以参考官方帖子. 如下源码来自于上述帖子. CMAKE_MINIMUM_REQUIRED(VERSION 2.8 FATAL_ERROR) PROJECT(R ...

  8. JDK9的新特性:JVM的xlog

    目录 简介 xlog的使用 selections output decorators 总结 简介 在java程序中,我们通过日志来定位和发现项目中可能出现的问题.在现代java项目中,我们使用log4 ...

  9. 详解Java Chassis 3与Spring Cloud的互操作

    本文分享自华为云社区<Java Chassis 3技术解密:与Spring Cloud的互操作>,作者: liubao68. Java Chassis 3一个很重要的设计原则:利用架构的韧 ...

  10. HarmonyOS多音频播放并发政策及音频管理解析

      音频打断策略 多音频并发,即多个音频流同时播放.此场景下,如果系统不加管控,会造成多个音频流混音播放,容易让用户感到嘈杂,造成不好的用户体验.为了解决这个问题,系统预设了音频打断策略,对多音频播放 ...