这部分要讲的就是MVC中的模型M。

ActiveRecord是Rails进行数据库操作的核心组件,采用标准的ORM模型,将数据库的表映射到相应的类,将行记录对应到具体的实例对象,字段对应的是实例对象的属性。

ORM模型就是对数据库的高级封装,也就是让我们不使用复杂的SQL语句就能对数据库进行操作。而且这样我们不用去关心数据库是mysql还是sqlite,都是一样地去调用接口就可以了。ORM的缺点就是不够灵活,有时候会影响数据库存储的效率,不过效率我们不考虑,我们考虑快捷开发即可。

下面针对上图展开:

一个ActiveRecord也就是模型类,对应一张数据库的表

比如我们用ActiveRecord创建了一个实例对象,那么这个实例对象往往对应这张表中的一行记录(也可以是多行记录)。

一个实例对象中的属性就对应着行中的某个字段。

下面继续完善我们的微博实例:

如上,rails自动生成的Post模型还什么都没有,它继承于ActiveRecord这个类,而这个类本身就封装了很多数据库的操作方法了,比如下面的Post.all就是ActiveRecord的数据库操作方法。控制器文件中的Post就是上面的模型类,所以模型类没有代码,也可以在控制器文件中直接使用(都封装起来了)。

如下posts变量就是实例对象,也就是行记录(这里是多行)

Rails官方文档,使用举例,比如ActiveRecord中的即Post.all的all方法在文档中如下,也就是查询到模型中的所有数据:

对应index视图中第14行就是字段,也就是取出每条记录的content字段或者说模型实例的content属性。

我们还需要用户模型,用户具有注册,发布微博的功能等等,因为功能很多所以我们实际上要添加的是用户资源(控制器、视图、模型一大堆都包含),但是我们这里讲的是模型,我们就创建一个用户模型好了,控制器那些后面再加上去也一样。创建模型还是使用generate命令,注意创建资源我们用复数,但是控制器或模型都用单数,如下是user而不是users

我们给user表创建两个字段,一个是username类型为string,一个是email类型为string

模型创建好之后还是先进行数据库迁移操作,输入rake db:migrate就可以了:

这时候user模型才算是真正可以使用了。因为没有给user添加相应的控制器、视图、模型,所以不能在网页上进行之前那样的操作,只有模型我们就先在rails控制台进行操作(不是cmd控制台就行)。我们要进入rails的控制台,(记住必须在工程目录下执行 rails console命令)如下

这样我们就可以使用rails的控制台了,下面我们用rails的相关方法创建一个名字叫sundi的用户:

输入第一行命令后点击回车即可

如上就完成了在内存中创建User对象了(表是user表,只有这里U是大写),但是我们还没把对象保存到变量里,无法对对象进行操作。所以我们先把该对象保存到变量user

@user=User.new(:userName=>'sundi',:email=>'sundi0105@hotmail.com')

注意rails的控制台行满不会换行显示而是后面内容变成>符号,如上语句就是:

结果如下

这样还不够,我们还需要模型的save方法将这个对象真正创建到user表中:

创建完之后可以使用user模型的find方法查看:

传入参数就是创建的id号,因为我们只创建了一个用户sundi所以id肯定是1

可以看到返回结果的后面还包含创建时间和更新时间,挺智能的。

我们查看所有则使用all方法,只有1个所以返回结果看起来一样,不过记住返回结果的数据类型是不一样的

通过这节课,我们算是基本了解了Rails中模型组件ActiveRecord类的相关概念,并通过创建一个user模型基本了解ActiveRecord的使用方法。

转载于:https://www.cnblogs.com/blueColdFire/p/5193856.html

9--Rails数据交互1相关推荐

  1. Cache 与Memory架构及数据交互

    Cache 与Memory架构及数据交互

  2. java与c/c++之间的数据交互-----jni点滴

    2019独角兽企业重金招聘Python工程师标准>>> 淡泊明志.宁静致远 A Diamond is just a piece of Coal that did well under ...

  3. AngularJs $resource 高大上的数据交互

    $resource 创建一个resource对象的工厂函数,可以让你安全的和RESFUL服务端进行数据交互. 需要注入 ngResource 模块.angular-resource[.min].js ...

  4. ajax前后台交互 .net,使用ajax进行前后台的数据交互

    1 什么是ajax: ​ 异步的JavaScript和xml,跟后台交互,都用json 2 ajax干啥用的? ​ 前后端做数据交互: 3 特点: ​ -异步(异步和同步的区别:同步是请求发过去,要等 ...

  5. django前端引用数据_「基于Python技术的智慧中医商业项目」Django前端网站篇-5.资讯的数据交互...

    如果你对中医感兴趣欢迎留言讨论,觉得我的内容对你有帮助的话,能够请我喝一杯沪上阿姨不禁万分感谢. 内容简介 本章介绍Django搭建中医网站项目平台前端建设之资讯模块的数据交互的内容.其中由于代码量较 ...

  6. Android开发之Service与Activity数据交互(源代码分享)

    Service想要与Activity进行数据交互,首先Activity先得绑定Service.bound service是service 的实现,它允许其他应用程序绑定到它并与之交互.要提供bound ...

  7. Android开发之Fragment与Activity的数据交互通过回调机制实现(源代码分享)

    上一篇文章简单介绍了Android的回调机制的使用,这一篇博文将重点介绍Fragment碎片与activity的数据交互,fragment在Android开发中起着至关重要的作用,通过官方Androi ...

  8. SpringMVC入门(二)—— 参数的传递、Controller方法返回值、json数据交互、异常处理、图片上传、拦截器

    SpringMVC入门(二)-- 参数的传递.Controller方法返回值.json数据交互.异常处理.图片上传.拦截器 参考文章: (1)SpringMVC入门(二)-- 参数的传递.Contro ...

  9. 运用Smark.SocketAsyncs方便实现数据交互服务

    Smark.SocketAsyncs是通过SocketAsyncEventArgs对Socket进行包装的处理程序,暂时只封装了对Tcp的支持.以下是通过Smark.SocketAsyncs封装一个简 ...

  10. 【清华集训2016】数据交互

    [清华集训2016]数据交互 比较神的\(DDP\). 首先对于给出的一条链我们分两部分统计:\(lca\)以及其他部分. 我们设两个变量\(w_i,g_i\).一条路径的权值就是路径上所有点的\(w ...

最新文章

  1. Algorithms学习笔记-Chapter0序言
  2. 四十五、爬取QQ音乐Lemon 日语歌的评论
  3. 记一次继承了AbstractAuthenticationProcessingFilter 的过滤器被执行了两次问题
  4. MYSQL数据库的优化(二)
  5. 【BZOJ2054】疯狂的馒头(并查集)
  6. linux ora27040,AnyBackup-Oracle 异机恢复任务失败,执行输出提示 ORA-00344、ORA-27040 错误...
  7. 求1000的阶乘c语言编程,用C语言编写程序,求出1000的阶乘?
  8. Python 脚本相关知识
  9. ultraedit激活
  10. 元宇宙NFT商城系统|艺术数字藏品平台源码部署
  11. IAR for ARM系列教程(一)_新建软件工程详细过程
  12. erlang 学习ets表-2
  13. thinkphp5.0漏洞修复
  14. linux 双显示器 异常,终于搞定双显示器了
  15. python对于会计的好处_学好会计学的作用及意义
  16. 新项目筹划中。。。。
  17. 计算机视觉——Bag Of features图像检索
  18. VC++实现电脑睡眠/休眠/锁定/关闭屏幕
  19. Java 爪哇学习(三) 基础
  20. html5联网多媒体信息发布系统

热门文章

  1. 2. Anaconda下使用Pip或者conda安装库指南
  2. oracle sqlplus执行脚本_oracle主、从自动切换方案?我是这样实现的
  3. 一步一步教你如何安装Dart
  4. Eclipse快速导入继承类的方法
  5. 服务站: WCF 消息传递基础 -- MSDN Magazine, April 2007
  6. PHP curl_setopt函数用法介绍
  7. Handler 、 Looper 、Message
  8. 某里巴巴Java工程师常规面试题以及解答
  9. selinux --chcon命令
  10. oracle函数大全-字符处理函