rails 关联模型_如何使用Rails控制台测试Rails模型,关联和验证

rails 关联模型

介绍和定义

在Microverse远程学校学习如何构建Rails应用程序时,很多时候我和我的编码伙伴都需要测试我们的Rails关联方法是否有效。 我们必须学习如何使用rails控制台进行测试,因为它比运行浏览器或在单独的文件上创建测试要快。

Rails控制台是内置在rails环境中的irb会话,可通过在终端中键入rails c进行访问。 构建Rails应用程序时,可用于测试关联方法验证检查错误消息

让我们构建一个示例博客应用程序以查看其工作方式。 我们将首先说明什么是关联方法,验证和错误消息。

Rails中的关联方法用于显示两个模型之间存在的关系。 它显示了模型如何连接。 什么是导轨模型? 这是一个Ruby类,它通过rails迁移文件将记录添加到数据库中。

生成Rails模型会自动生成一个迁移文件。 迁移文件会创建不存在的表,并在架构中添加或删除列。 Rails关联方法 使 捕获模型之间的关系很容易

Active Record验证提供了验证帮助器,以确保仅将有效数据保存到数据库中。 例如,在我们的示例博客应用程序中,我们要求用户输入其名称以保存到数据库。 通过将验证帮助器放置在user.rb文件中,如果未提供名称,则无法保存用户。

如果用户无法保存,rails将提供错误消息以通过错误消息实例方法来解释原因。 这些实例方法将返回错误消息数组(如果存在)或空数组(如果未找到错误)。

errors.full_messages方法返回易于阅读的错误消息列表,这些错误消息可以显示在视图页面中供用户查看。

创建一个新的Rails应用并生成Rails模型。

我们将建立一个具有两个模型的博客,一个具有名称属性的用户和一个具有标题属性和主体属性的文章。 首先,请打开您的终端并输入命令rails new blog_app

命令生成新的Rails应用程序所需的文件夹和文件。

接下来,将CD放入blog_app文件夹,然后创建模型。 首先,我们创建一个用户模型,然后创建一个文章模型。

在rails中创建模型的命令以rails g model开头,后跟模型名称 (例如User ),然后是列名:数据类型 (例如name:string

rails g模型(模型名称)(nameofcolumn1:数据类型)(nameofcolumn2:数据类型)

我们的情况: -rails g model用户名:string

此命令创建一个迁移文件,测试模型以及在测试模型时用于添加数据的夹具。 我们创建了一个具有一个属性的用户模型,即用户名。 我们将使用相同的过程来创建Article模型,该模型将具有两列,标题和正文,两者均为字符串类型

:-rails g model文章标题:琴弦琴体:琴弦

要查看您的迁移文件,请导航至app / db / migrate。 这使您可以大致了解迁移文件将在您的数据库中创建哪些表和列 数据库架构。 文件按生成顺序出现。 请注意,我说这是将要创建的内容的一瞥,这意味着尚未创建表。

要创建它们,只需键入rails db:migrate命令,该命令将迁移文件并在数据库中创建带有名称列的用户表和带有标题和正文列的articles表。

如果在生成rails模型时出错,则可以使用rails destroy model(模型名称)命令撤消rails g model命令。 它将反转rails g model命令并除去在运行rails db: migration命令之前已生成的迁移文件。

如果你有 已经运行rails db:migration命令 然后简单地做 Rails db:回滚将表拖放到架构中,删除app / db / migrate文件夹中的迁移文件,然后使用上面的rails destroy命令破坏rails模型。

用户模型与文章模型之间的关系。

在博客应用程序中,一个用户可以撰写许多文章,但一篇文章只能属于一个用户。 开发人员在为他们的应用程序设计数据库时,使用ERB图直观地显示了这种关系。 LUCID Chart是一个很好的工具

通过添加has_many关联方法来连接模型。

接下来,将has_many 关联方法添加到模型中。 转到blog_app / app / models / user.rb has_many:文章。 通过继承Rails中的Application Record类,可以使用此方法。

使用Rails Console测试has_many方法

在这一点上,我们可以开始测试我们的模型和关联方法。

1.在您的终端中输入rails c以访问您的irb会话

2.检查是否已经使用User.all创建了用户

此命令通过活动记录使用SQLite查询来检查用户表中是否存在任何用户。 由于我们尚未为应用程序创建用户,因此未返回任何内容。

3.创建一个用户,使用User.new命令。 为了易于使用,我们将使用一个变量来存储新用户的数据。 创建一个用户变量并将其分配给User.new,例如user = User.new。 Ť

他的返回值将是没有属性的用户,即user_id = nil,name = nil等。这是另一种检查数据库中的aka属性列是否正确的方法。

如下填写属性user = User.new(name:“ Zoe”)

此命令创建一个名为Zoe的用户。 如果键入user.id,则输出将为nil,因为已创建用户但未将其保存到数据库。 因此,我们必须执行user.save才能用户保存到数据库中。 现在尝试通过键入命令user.id来查询用户的ID,输出将为1。

恭喜,您已经创建了第一个用户。

在上图中,begin transaction表示将用户保存到数据库的过程已经开始。 如果一切正常,则提交事务,并返回布尔值true。

4.创建新用户并将新用户保存到数据库的更快方法是使用create方法,如下所示: user = User.create(name:'Henry')。 此方法完成了创建对象并将对象保存到数据库的双重工作。

向模型添加验证

创建Rails模型的一个重要方面是验证那些模型属性的存在。 这样可以防止将无效对象保存到数据库。 下图显示了一个没有将name属性成功保存到数据库的用户。

我想不出我们想要构建不需要特定属性的应用程序的实例,但是该属性在数据库中以空列的形式存在。

5.打开user.rb文件,添加以下验证:名称,状态:true。

此验证帮助器可确保如果不存在name属性,则不会将任何内容保存到数据库。

使用User.new创建另一个用户 不要填写用户名,然后填写用户名 保存。 输出结果应为假,表示我们的用户无法保存。

当模型无法保存时检查错误

要检查为什么我们的数据库保存错误,请执行user.errors.any吗?

终端上的输出应为布尔值true,表示已发现错误。 要列出错误,请执行user.errors.full_messages ,它返回如下错误列表:

添加belongs_to关联方法

现在,我们向Article模型添加一个Emirates_to方法。 没有它,用户模型与商品模型之间的关系就无法完成。

打开article.rb并在类内添加belongs_to:用户 ,还添加验证,即validates:title,presence:truevalidates:body,presence:true

使用新方法创建新文章并将其保存到数据库。 文章保存成功。

Rails控制台还可用于使用count方法在数据库中查询所有已创建的文章或数据库中存在的所有用户。

如果我们想要第一个用户创建的文章列表,我们可以执行user = User.first来获取user_id == 1的用户,然后执行user.articles返回第一个用户创建的文章数组。

在我们的例子中,我们收到一条错误消息,指出数据库中没有列名称为article.user_id的列

使用belongs_to方法不会显示哪个用户创作了哪篇文章。 文章表中需要一个user_id才能将每个文章映射到特定用户。 这是通过将user_id列添加为文章表中的外键来完成的。

在Rails 5及更高版本中,使用rails generate migration add_references_to_articles用户:引用

执行rails db:迁移以迁移生成的文件。 如果打开架构,您将看到已添加的整数类型的列user_id 。 该架构将进行如下修改:

我们可以将在控制台中创建的第一篇文章设置为属于第一用户,如下所示:

  • article = Article.first ,它获取数据库中的第一篇文章并将其存储在article变量中。
  • article.user_id向我们显示此文章所属的用户ID,当前为null
  • article.user_id = 1设置文章属于第一个用户的ID。
  • 文章。 保存保存文章

现在,我们可以输入user = User.first,然后键入user.articles,以提供第一个用户创建的文章列表。 您还可以使用user.articles.count在数据库中查询第一个用户拥有的文章总数。

结论

我相信您现在对Rails控制台有了更好的了解,并希望打开您的终端机并这样做Rails c不会让您感到恐惧。 开始使用您的应用程序模型和方法。

控制台中还可以使用其他方法来测试不同的事物,例如find方法 但是我希望这能激发您更多地了解Rails控制台。

本教程的源代码可以在我的GitHub上找到 ,如果您喜欢本教程或发现有帮助的话,可以在仓库中添加⭐️。

先前发布在 https://medium.com/@lukoyedith/a-step-by-step-guide-to-using-the-rails-console-to-test-rails-models-associations-and-validations-986f4825aadf

翻译自: https://hackernoon.com/how-to-use-rails-console-to-test-rails-models-associations-and-validations-w26j3wyw

rails 关联模型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值