Rails指南-第4部分数据库模型

5分钟读 2021年8月30日

- - -

在我们的以前的博客我们讨论过如何一个Rails控制器行为类似于路线之间的中间层,模型和视图。今天,我们将看看模型组件在一个Rails应用程序。

在最简单的术语中,模型是一个在我们的数据库表。这样的模型可以有不同的列,两个或两个以上的模型可以通过共享链接列,您可以定义自定义范围内的模型和控制器利用它,等等。

看我们之前的应用程序。它有一个单一的模式命名的书。和模式。rb文件,我们可以看到它有三个列(标题、观众、isbn)创建,以及两列(created_at updated_at)自动Rails带来的。

这是使用Rails模型生成器创建上次博客这种语法在终端:

rails g模型书名:字符串观众:字符串isbn:整数

我们也可以手动创建一个模型在app / models文件夹,让我们创建一个作家。rb文件时,它将一个类继承自ApplicationRecord的作者。

第二部分是创建实际的表。我们可以再次运行迁移命令:

rails迁移g create_authors

运行rails db:迁移到创建作者表。我们可以检查模式。rb文件以确保一切都按照计划:

我们可以将列添加到模型迁移文件。如果我们想要添加一个名称列,在终端,我们可以运行以下命令:

rails迁移g add_name_to_authors名称:字符串

这将创建一个迁移文件db /内部迁移文件夹。

运行rails db:迁移您的终端将添加的名字专栏作者表。

同样我们可以删除列的命令:

rails迁移g remove_name_from_authors名称:字符串

简单地删除迁移文件如果你改变你的想法。确保用rails迁移尚未运行db:迁移

Rails也给了一个强大的发电机选项来创建一个模型,表和列迁移一行命令,所以你不需要创建一个模型,创建一个表,添加单个列。假设我们创建一个出版商列模型与一个名称。我们可以运行:

rails g模型出版商名称:字符串

最常见的任务之一,您将执行在一个模型是连接表与辅助方法。假设我们想要达到以下三个模型之间的关系:

作者将有很多书。和一个出版商将有许多书。(忽视这一事实可能是由多个作者写的一本书现在)在这样的一对多的关系,它的工作模型跟踪或列包含一个引用超级模型。

书中添加这些列模型,我们可以再次利用迁移:

rails迁移g add_columns_to_books作者:引用出版商:belongs_to

注意引用和belongs_to完成同样的事情。两者之间没有差别。

我们需要删除零:假的内部迁移,因为我们已经有一些书作者和出版商对象,但是他们没有任何数据

运行rails db:再次迁移。我们可以看到中添加的列。

我们现在可以创建书籍作者和出版商id。在现实生活场景中我们可能想要查询的书从一个特定的作者和出版商。而不是使用一个循环,Rails给我们一些有用的辅助方法。

作者的内心。rb和出版商。rb文件,我们可以调用has_many方法:

这给了我们一个实例方法在作者和书类,命名的书

从这本书的角度来看,我们也可以查询一本书的作者和出版商与一个辅助方法:

这本书给对象实例方法命名的作者和出版商

我们甚至可以通过工匠表连接作者和出版商的书。想象作者M阿基诺写了3本书:“哈希表的分析”与“极客文化”的出版商,出版商的“二进制堆”技术的“书呆子”,“数据可视化情节”和“极客文化”的出版商。

如果我们要查询所有米阿基诺的书的出版商,长的路是找到所有他的书,然后从书籍、退出所有出版商的书籍。但在Rails中,我们可以做所有这些与一个衬套:

我们更新我们的种子。rb文件并在Rails控制台看到的一切行动。

书对象现在等一个author_id publisher_id一样,让我们把这些。我们可以重置种子。rb文件的命令:

rails db:重置

在Rails控制台中,运行一些简单的命令,如作者。首先,书。数,以确保一切都是正确的。

现在让我们尝试的辅助方法。这里,我创建了一个名为阿基诺和存储的变量。第一个进去。通过简单地调用阿基诺。书和阿基诺。出版商,数据库能够拿出各自的所有信息回我!

我们会看看我们能做些什么在我们的数据模型验证等,自定义范围,和模型问题在下周!见到你!

- - -

- - -

Baidu