今天通过一个玩具应用的案例认识了ruby on rails当中的脚手架。
此处省略创建项目的过程,直接开始介绍脚手架。
初步认识脚手架
使用Rails内置的脚手架生成资源
例如:我们现在需要一个用户表,假如有用户名,用户id,用户邮箱这三个字段。要实现这个模型,并为它创建web页面。需要执行下面命令:
User | |
---|---|
id | integer |
name | string |
string |
rails generate scaffold User name:string email:string
#rails generate scaffold 代表生成rails脚手架
#User 是对应的表名
#name:string 是对应的属性以及类型,多个属性用空格隔开即可
需要注意的是:没必要指定 id 字段,Rails 会自动创建并将其设为表的主键(primary key)。
迁移数据库
下面这个命令的作用是使用新的 User 数据模型更新数据库。
rails db:migrate
需要注意的是:在 Rails 5 之前的版本中, db:migrate 命令使用 rake 执行,而不是 rails 。因此,执行迁移的 rake db:migrate 命令要写成:
bundle exec rake db:migrate
生成对应的增删改查页面
URL | 动作 | 作用 |
---|---|---|
/users | index | 列出所有用户 |
/users/1 | show | 列出id为1的用户 |
/users/new | new | 创建新用户 |
/users/1/edit | edit | 编辑id为1的用户 |
效果如下:
index页面
new页面
show页面
edit页面
目录结构如下,基于MVC的文件分布如下:
以
index
页面为例,介绍一下,Model
,View
,Controller
这三者之间的关系:
- 浏览器向该URL
/users
发送请求 -
rails
路由对URL分析,将/users
交给users_controller.rb
,也就是控制器。 -
index
动作对它进行处理,向user.rb
,模型请求获取全部用户数据。 -
user
模型从数据库取出数据并返回给控制器。 - 控制器将得到的数据放在
@user
当中,然后传入index
视图。 - 视图用得到的数据渲染HTML页面。
- 控制器将得到的页面返回给浏览器。
今天在学习过程中遇到的问题:
在创建好user
资源后,运行访问/user
页面报错:
ArgumentError in UsersController
#index key must be 32 bytes
搜索发现这个是rails 5.0.1
之前的一个bug,于是我更新了版本。但是不清楚除了更新版本以外还有什么其他解决方案。
关于这个bug的链接:
https://github.com/rails/rails/issues/26694
总结
通过今天的应用示例对脚手架有了一个初步认识,不过脚手架生成的代码只是一个简单的框架,还有许多东西需要完善,比如
- 没有页面布局
- 在新建用户时没有验证是否为空和合法性
- 没有很完善的测试
总之,还有许多功能,内容需要我们一点点完善。