首页
学习
活动
专区
圈层
工具
发布

ActiveRecord入门教程:Ruby的ORM神器

(没错,就是Rails框架中那个让人又爱又恨的数据库交互层)如果你曾经被SQL语句折磨得死去活来,或者厌倦了手写数据库查询代码,那这篇文章绝对值得一读。...在ActiveRecord的世界里:- 数据库表 → Ruby类- 表中的一行 → 类的一个实例- 表中的列 → 实例的属性这种映射关系让我们能够用面向对象的方式来思考和操作数据,而不必直接处理SQL查询...不需要定义属性或方法,ActiveRecord会自动从数据库表中读取列信息,并为每一列创建对应的访问器。...# 返回该用户的所有文章获取文章的作者post = Post.find(1)author = post.user # 返回文章的作者```多对多关系假设文章可以有多个标签,一个标签也可以属于多篇文章...tag = Tag.find(1)tag.posts # 获取标签下的所有文章```通过关联关系更复杂的关系,比如通过中间表关联两个模型:```rubyclass Author < ActiveRecord

23310

Rust Web 生态观察| SeaORM :要做 Rust 版本的 ActiveRecord

引子 有些人说用 Rust 进行 Web 开发 是杀鸡用牛刀,这种观点其实是对「系统级语言」的刻板印象造成的。无论从性能、工程架构还是开发效率,Rust 其实都很出色,目前就是需要一套比较成熟的框架。...Diesel ORM 的设计也是 sgrif 总结了 AR 中的经验教训。Diesel 是一个优秀的 ORM 框架,但是它并不支持异步。...“Active Record ,是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录。...如果你没有使用 Rails 和 ActiveRecord 的经验,也没有关系。...比如,设置表关系的 DSL 方法:has_many 和 belongs_to 。

12.5K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    使用Ruby on Rails和Bootstrap开发社交网络平台的详细教程

    在这篇博客中,我们将深入介绍如何使用Ruby on Rails(RoR)框架和Bootstrap前端框架共同开发一个简单而功能丰富的社交网络平台。...你可以使用以下命令进行安装:gem install rails步骤2:创建Rails应用使用以下命令在终端中创建一个新的Rails应用:rails new social_network然后进入应用目录:...在app/models/user.rb中添加关联:class User has_many :posts has_many :friendshipsend步骤8...步骤10:运行应用运行以下命令启动Rails服务器:rails server然后在浏览器中访问http://localhost:3000,你将看到你的社交网络平台。...随着你的学习深入,你可以添加更多功能,例如用户认证、用户间关系、帖子、评论等,以创建一个更加完整和实用的社交网络应用。祝你在Ruby on Rails的开发之旅中取得成功!

    3.2K10

    慢的不是 Ruby,而是你的数据库

    这个例子展示了从表中获取一条记录的操作,虽然它并非关系型数据库所擅长的领域,但它揭示了 ORM 存在的实际性能问题:缺乏连接、排序、过滤和计算等操作。...我曾在一个拥有百万级用户的应用程序中,导致数据库服务器集群崩溃:原因在于一个无关控制器的简单更改,使 Rails 切换到一个外部连接,该连接具有巨大物化视图,本不应以这种方式连接(用于报告)。...未优化的连接。添加简单的 has_many 太容易了,这使得开发人员可以在数据库中启动过于繁重的查询。一旦通过应用程序引入和传播,这几乎不可能解决。...从内存和代码中填充某个数组,然后从数据库中填充该数组,速度仍然要快一千倍或更多。正如我在第一段中所展示的那样。 所以,该怎么办呢?我采用的一些经验法则是: 在可以避免的情况下,不要使用数据库。...这也是 Ruby 很少在 Rails(和 / 或 Web)之外使用的原因之一。 [7] 令人惊讶的是,从内存中的 SQLite 中查找比从数据库中查找要慢。

    5.5K30

    架构之美:教你如何分析一个接口?

    Rails一个重要的设计理念就是约定优于配置,无需配置,按照缺省的风格就可以完成基本的功能,这样的理念贯穿在Rails各个接口的设计中。...这就是一种约定,不需要你费心思考,因为这是人家总结出来的行业中的最佳实践。只要按照这个规范写,你写的就是一个符合REST规范的代码,这就是Rails引导的外部接口风格。...Article.find_by_title_and_author("foo", "bar") 从功能的角度说,这样的查询在功能上是完全一样的,但显然Rails程序员和Java程序员的工作量是天差地别的,...比如,每篇文章可以有多个评论,用Rails的方式写出来是这样的: class Article < ApplicationRecord has_many :comments ... end 而如果用传统...Java风格,你写出来的代码,可能是这个样子的: class Article { private List comments; ... } “有多个”这种表示关系的语义用has_many

    3.4K20

    我发现了一个非常酷的软件,用自然语言编程!

    难道我之前故事中杜撰的X语言,Z语言真的实现了?...“Ruby on Rails(简称)中的Active Record是DSL的一个典型。” “又一个新词!什么是Active Record? ” 隔着屏幕,我都能感受到张大胖有点儿不满。...has_many :books, dependent: :destroyend “当你这么写了以后,神奇的事情发生了,按照约定,RoR会得知在数据库表中下图所示的关系,然后你的Author类突然拥有了很多有用的新方法...: "xxxx")#删除这个Author,注意,所有相关的Book也会删除author.destroy 张大胖说:“果然是厉害,就通过has_many这么简简单单的一句话,框架就可以获取这么多信息,自动生成这么多代码...“还有一种办法就是‘寄生’在别的语言中,利用别的语言(Ruby ,Python)的动态特性,构建你自己的语法,像刚才的has_many就是这么做的,这种方式叫做内部DSL。” "好麻烦!"

    1.5K20

    重新温习软件设计之路(2)

    比如,从Rails的对外暴露的REST接口设计中,可以看到,它对REST的使用方式做了一个约定,只要遵循Rails的习惯写法,写出来的结果就基本上符合REST规范的。...又如,从Rails的程序员编写的API接口设计中,可以发现它十分关注API的表达性,可以很方便地表达一对多的关系: class Article < ApplicationRecord has_many...{ get; set; } ... } 而这样的风格,并没有错,只是无法很直白的表现出一对多的关系,而Rails的“has_many”表达地更加直白。...当然,我们也可以通过其他的方式去支持这种直白的关系表达,但并不能像Rails这样将其直接提供出来。...记得我在2018年学习Spring Cloud的时候,接触了Spring Data JPA这个框架,现在看来,它就参考了Rails的接口设计,这时如果再需要表达一对多关系的时候,就可以在Java中写成这个样子了

    1.4K30

    Yii数据库操作方法指南

    ,因此要获取结果集的记录可以这样: $dataReader=$command->query(); // CDbDataReader::read()可以一次获取一行数据,到末尾时返回false while...最典型的功能就是执行CRUD操作 // DAO定位于解决复杂的数据库查询,而AR定位于解决简单的数据库查询 // 一个AR类代表一张数据表,而一个AR对象代表表中的一行真实的记录,AR类继承CActiveRecord...AR类中的一个属性表示,如果试图通过属性访问表中没有字段,将会抛出一个异常。...// 如何让一个AR关联另一个AR // 4中关系类型 self::BELONGS_TO self::HAS_MANY self::HAS_ONE self::MANY_MANY 关系名称(关系类型...间的关系之后,当执行关系查询时,与AR关联的AR也会自动实例化, 比如这样: $author = User::model()->findByPk(1); $author->posts;

    2.1K70

    GitHub 关系型数据库垂直分库实践

    十多年前,与当时的大多数 Web 应用程序一样,GitHub 也是一个使用 Ruby on Rails 开发的网站,它的大部分数据都保存在 MySQL 数据库中。...模式领域之间有清晰的边界,并暴露出各个功能之间模糊的依赖关系。...在 Rails 应用程序中,这些信息保存在 db/schema-domains.yml 配置文件中,如下所示: gists: - gist_comments - gists - starred_gists...另一种比较有挑战性的情况是 has_many :through 关系导致需要连接来自不同模式领域的表。...从 2019 年开始,我们逐渐具备了对这个关系型数据库进行伸缩的能力,并获得了如下结果: 在 2019 年,mysql1 平均每秒处理 95 万个查询,其中 90 万个查询发生在副本上,5 万个发生在主实例上

    2.4K11

    总结Web应用中常用的各种Cache

    1.客户端缓存 一个客户端经常会访问同一个资源,比如用浏览器访问网站首页或查看同一篇文章,或用app访问同一个api,如果该资源和他之前访问过的没有任何改变,就可以利用http规范中的304 Not...作为key去redis里面获取,如果获取不到(404)就转发给unicorn进行处理,然后改写generate_static_file和delete_static_file方法: redis_cache.set...,比如我们可以在更新或者删除文章评论的时候,自动个更新: class Article has_many :commentsendclass Comment belongs_to :article...,cache设置灵活,也方便扩展,缺点是需要用不同的查询方法名(fetch),以及额外的关系定义。...,缺点是扩展比较困难,对于只获取少量字段的查询无法缓存。

    6.2K40

    如何从 MongoDB 迁移到 MySQL

    从关系到文档 虽然这篇文章的重点是从 MongoDB 迁移到 MySQL,但是作者还是想简单提一下从 MySQL 到 MongoDB 的迁移,如果我们仅仅是将 MySQL 中的全部数据导入到 MongoDB...从文档到关系 相比于从 MySQL 到 MongoDB 的迁移,反向的迁移就麻烦了不止一倍,这主要是因为 MongoDB 中的很多数据类型和集合之间的关系在 MySQL 中都并不存在,比如嵌入式的数据结构...也就是把所有 embeds_many 和 embeds_one 的关系都改成 has_many 和 has_one,同时将 embedded_in 都替换成 belongs_to,同时我们需要将工程中对应的测试都改成这种引用的关系...通过这段代码我们就可以轻松将原有的嵌入关系全部展开变成引用的关系,将嵌入的关系变成引用除了做这两个改变之外,不需要做其他的事情,无论是数据的查询还是模型的创建都不需要改变代码的实现,不过记得为子模型中父模型的外键添加索引...,否则会导致父模型在获取自己持有的全部子模型时造成全表扫描: ?

    7.5K52

    Mybatis-Plus实践学习(二十一)

    1、ActiveRecord ActiveRecord(简称AR)一直广受动态语言( PHP 、 Ruby 等)的喜爱,而 Java 作为准静态语言,对于ActiveRecord 往往只能感叹其优雅,所以我们也在...AR 道路上进行了一定的探索,喜欢大家能够喜欢。...ActiveRecord也属于ORM(对象关系映射)层,由Rails最早提出,遵循标准的ORM模型:表映射到记录,记录映射到对象,字段映射到对象属性。...配合遵循的命名和配置惯例,能够很大程度的快速实现模型的操作,而且简洁易懂。...,在ActiveRecord中封装了对数据库的访问,即CURD;; ActiveRecord是一种领域模型(Domain Model),封装了部分业务逻辑; 1.1、开启AR之旅 在MP中,开启AR非常简单

    69210

    TP入门第十二天

    函数使用:在前面制作留言板的过程中,用到date函数格式化时间显示,这里说明。...支持多个函数,函数之间支持空格 支持函数屏蔽功能,在配置文件中可以配置禁止使用的函数列表 支持变量解析缓存功能,重复变量字串不多次解析 使用例子: {$webTitle|md5|strtoupper|...> 注意函数的定义和使用顺序的对应关系,通常来说函数的第一个参数就是前面的变量或者前一个函数调用的返回结果,如果你的变量并不是函数的第一个参数,需要使用定位符号,例如: {$create_time|date.../Common” /> 如果需要load导入,请参考手册学习 Volist详解:Volist标签主要用于在模板中循环输出数据集或者多维数组。...,包括HAS_MANY 和 BELONGS_TO 多对多关联 :MANY_TO_MANY 关联关系包括下面四种:HAS_ONE、BELONGS_TO、HAS_MANY和MANY_TO_MANY。

    1.4K60

    Phoenix 1.3,迈向正确的道路

    —— 这让一个普通的工程师也可能写出非常 scalable 的 realtime app,比如一个支撑百万级用户的聊天软件。...由此,web 层被狠狠地削薄了,我们做一个系统不再是从 model 出发,在 controller 里构建逻辑,然后在 view 中呈现;相反,我们开始考虑如何打造 service,如何提供 internal...这让我在 rails, django, phoenix,你们错了 一文中提到的例子,从结构上打造起来方便很多: ?...以上种种,解耦经验丰富的工程师也许不屑一顾;但它的确为经验不那么丰富的工程师,从结构上指出了一条明路,尤其是很多直接从 rails 转 phoenix,对 elixir / erlang VM 还 一知半解的工程师...(本文的代码和大部分截图出自:https://www.youtube.com/watch?v=tMO28ar0lW8。McCord 大神亲自揭秘 phoenix 1.3 的更新。这个视频非常值得观看)

    2K150

    Active Record基础

    Active Record 是MVC中的M,负责处理数据和业务逻辑,Active Record实现了Active Record模式,是一种 对象关系映射 系统 Active Record 模式: 在 Active...Record 模式: 中,对象中既有持久存储的数据,也有针对数据的操作,Active Record 模式把数据存取逻辑作为对象的一部分,处理对象的用户知道如何读写数据。...对象关系映射: ORM是一种技术手段,把应用中的对象和关系型数据库中的数据表连接起来,使用ORM,应用中对象的属性和对象之间的关系可以通过一种简单额方法从数据库中获取,无需直接编写SQL语句,也不过度依赖特定的数据库种类...Active Record 的约定 命名约定 Rails把模型的类名转换为复数,然后查找对应的数据表,Rails提供的单复数转换功能非常强大,类名应该使用驼峰命名: ?...迁移的代码储存在特定的文件中,可以通过rails命令执行。

    4.5K20

    DHH:2017年Rails 框架还值得学习吗?

    通过它, 开发者可以获得巨大的生产力. 众多所知, Rails 也因此而获取得巨大的成功. 不过令我惊讶的是, 在这点上, 世界上竟然没有多少同类的竞争对手....我已经在其他地方进一步详细阐述了在Rails 核心原则中关于配置的约定方法, 以及点菜 / omakase冲突的说明, 和集成系统的吸引力以及 Rails 社区的其他核心价值....从 Rails 的这个核心原则之上, 我们构建了一个难于置信的无比强大的 web 框架, 它是实际用户需求驱动, 并且多范式设计, 满足大多数人需求, 并兼具一定自由度....我认为这或许有点关系, 但区别还是非常大, 如果因此而错失 Rails, 这个决策真的是因小失大....正如我上面提到的, Rails 有一个雄心勃勃的终极使命, 那就是站在全栈的角度下, 帮助开发者处理好过程中的每一块代码, 从连接到数据库, 到 nosql 数据存储, 到业务模型, 到控制器, 直到最后

    2.9K90

    数据结构——堆

    喜欢我的文章,点击上方“编程三分钟”关注,不加班时更新。 回复“资源”,获取一份专属大礼包。 真爱,加个“星标” 或者点个“在看”。...线型表转换成树无非就是将这个线型表的元素依次放入这个完全二叉树中,相反树转换成线性表就是将这个二叉树的节点层次放入这个表中 首先我们将这个堆的节点构造出来 typedef struct Heap {...,前面所讲都是为了接下来的操作 我们补充几个知识点: 一个满二叉树 父节点(序号数)\* 2 = 左子节点; 父节点(序号数)\* 2 +1= 右子节点; 在堆中,涉及一个调整,向上调整和向下调整...来看向下调整 这时候我们需要注意的是我们先要找到堂兄关系节点中的最小的那个和 父节点相比较。...就是为了实现这个堆排过程中的移动。当然还需要一个函数就是将这个堆顶取出来然后将堆最后的元素补上去再向下调整。

    57930

    第十五章·Linux系统管理-进程管理

    ---- 进程的生命周期  程序运行时进程的状态关系: 1.当父进程接收到任务调度时,会通过fork派生子进程来处理,那么子进程会集成父进程的衣钵。...2.子进程在处理任务代码时,父进程会进入等待的状态... 3.如果子进程在处理任务过程中,父进程退出了,子进程没有退出,那么这些子进程就没有父进程来管理了,就变成了僵尸进程。...W: #进入内存交换(从内核2.6开始无效) X: #死掉的进程(少见) Z: #僵尸进程 级高的进程...---- 平均负载与CPU的使用率有什么关系 在十几工作中,我们经常容易把平均负载和CPU使用率混淆,所以在这里,我也做一个区分,可能你会感觉到疑惑,既然平均负载代表的是活跃进程数,那平均负载搞了,不就意味着...2可以看到,1分钟平均负载会慢慢增加到2.00,而从终端三中还可以看到,正好有一个CPU的使用率为100%,但他的IOwait只有0,这说明平均负载的升高正式由于CPU使用率为100%,那么到底哪个进程导致

    1.3K31
    领券