📜  Ruby on Rails-视图

📅  最后修改于: 2020-10-20 05:29:37             🧑  作者: Mango


Rails View是一个ERb程序,它通过相互可访问的变量与控制器共享数据。

如果查看库应用程序的app / views目录,您将看到我们创建的每个控制器的一个子目录:book。当使用generate脚本创建同名控制器时,将自动创建这些子目录中的每个子目录。

Rails让您知道需要为每种新方法创建视图文件。您在控制器中定义的每个方法都需要有一个与该方法同名的对应erb文件,以显示该方法正在收集的数据。

因此,让我们为book_controller.rb中定义的所有方法创建视图文件。在执行这些视图时,同时检查这些操作是否适用于数据库。

为列表方法创建视图文件

使用您喜欢的文本编辑器创建一个名为list.html.erb的文件,并将其保存到app / views / book。创建并保存文件后,刷新Web浏览器。您应该看到一个空白页;如果不这样做,请检查文件的拼写,并确保它与控制器的方法完全相同。

现在,显示实际内容。让我们将以下代码放入list.html.erb中。

There are not any books currently in the system.

These are the current books in our system

  • 'show', :id => c.id} -%>

'new' }%>

要执行的代码是检查@books数组中是否包含任何对象。 .blank?如果数组为空,则方法返回true,如果包含任何对象,则返回false。该@books对象是在list方法内的控制器中创建的。

<%=%>标记之间的代码是link_to方法调用。 link_to的第一个参数是要在标记之间显示的文本。第二个参数是单击链接时调用的动作。在这种情况下,它是show方法。最后一个参数是通过params对象传递的书籍的ID。

现在,尝试刷新您的浏览器,您将得到以下屏幕,因为我们的图书馆中没有任何书籍。

暂无留言

为新方法创建视图文件

到目前为止,我们的图书馆中没有任何书籍。我们必须在系统中创建几本书。因此,让我们设计一个与book_controller.rb中定义的方法相对应的视图。

使用您喜欢的文本编辑器创建一个名为new.html.erb的文件,并将其保存到app / views / book。将以下代码添加到new.html.erb文件中。

Add new book

'create' do %>

:

:

:


'list'} %>

这里, form_tag方法使用提供给它的所有信息将Ruby代码解释为常规的HTML

标签。例如,此标记输出以下HTML-


下一个方法是text_field ,它输出文本字段。 text_field的参数是对象和字段名称。在这种情况下,对象是book ,名称是title

Rails方法称为collection_select ,创建一个从数组构建的HTML选择菜单,例如@books一个。有五个参数,如下所示-

  • :book-您要操作的对象。在这种情况下,它是一个书本对象。

  • :subject_id-保存书时填充的字段。

  • @books-您正在使用的数组。

  • :id-存储在数据库中的值。就HTML而言,这是

  • :name-用户在下拉菜单中看到的输出。这是

下一个使用的是commit_tag ,它输出一个按钮来提交表单。最后,有一个end方法可以简单地转换为

转到浏览器并访问http:// localhost:3000 / book / new。这将为您提供以下屏幕。

新书

以这种形式输入一些数据,然后单击“创建”按钮。在这里我将以下详细信息添加到字段中-

Title: Advance Physics
Price: 390
Subject: Physics
Description: This is test to create new book

当您单击“创建”按钮时,它将调用create方法,该方法不需要任何视图,因为该方法使用列表方法来查看结果。因此,当您单击创建按钮时,数据应成功提交并将您重定向到列表页面,其中您现在列出了一个项目,如下所示:

建立书籍

如果单击链接,则应该看到另一个“缺少模板”错误,因为尚未为show方法创建模板文件。

为显示方法创建视图文件

此方法将显示有关库中所有可用书籍的完整详细信息。在app / views / book下创建一个show.html.erb文件,并使用以下代码填充它-

Price: $
Subject :
Created Date:


'list'} %>

这是您第一次充分利用关联,这使您可以轻松地从相关对象中提取数据。

使用的格式为@ variable.relatedObject.column 。在这种情况下,您可以使用belongs_to关联通过@book变量获取主题的名称值。如果单击任何列出的记录,则它将显示以下屏幕。

显示书

创建用于编辑方法的视图文件

创建一个名为edit.html.erb的新文件,并将其保存在app / views / book中。用以下代码填充它-

Edit Book Detail

{:action => "update", :id =>@book} do |f| %>

Title:

Price:

Subject:

Description

'list' } %>

该代码与方法非常相似,除了要更新的操作(而不是创建和定义ID)之外。

在这种情况下,我们将form_for标记用于表单操作。它的性能将优于form_tag 。为什么,因为它会轻松创建与模型的交互。因此,每当需要在模型和表单字段之间进行交互时,最好使用form_for标记。

在这一点上,我们需要在列表方法的视图文件中进行一些修改。转到

  • 元素并将其修改为如下所示-

  • "show", :id => c.id} -%> "edit", :id => c.id} %>
  • 现在,尝试使用http:// localhost:3000 / book / list浏览书籍它将为您提供所有书籍的清单以及“编辑”选项。单击“编辑”选项时,将显示下一个屏幕,如下所示:

    编辑书

    现在,您编辑此信息,然后单击“保存更改”按钮。这将导致调用控制器文件中可用的update方法,并将更新所有已更改的属性。请注意, update方法不需要任何视图文件,因为它使用showedit方法来显示其结果。

    创建用于删除方法的视图文件

    使用Ruby on Rails从数据库中删除信息几乎太容易了。您不需要为delete方法编写任何视图代码,因为该方法使用列表方法来显示结果。因此,让我们再次修改list.html.erb并添加一个删除链接。

    转到

  • 元素并将其修改为如下所示-

  • 'show', :id => c.id} -%> 'edit', :id => c.id} %> 'delete', :id => c.id}, :confirm => "Are you sure you want to delete this item?" %>
  • :confirm参数显示一个JavaScript确认框,询问您是否真的要执行该操作。如果用户单击“确定”,则操作将继续,并且该项目将被删除。

    现在,尝试使用http:// localhost:3000 / book / list浏览书籍它将为您提供所有书籍的清单以及“编辑”和“删除”选项,如下所示:

    删除书籍

    现在,使用“删除”选项,您可以删除任何列出的记录。

    为show_subjects方法创建视图文件

    在app / views / book目录中创建一个新文件show_subjects.html.erb,并向其中添加以下代码-

    • "show", :id => c.id -%>

    您可以通过遍历单个主题的许多书籍清单来利用关联。

    现在,修改show.html.erb的Subject:行,以便主题列表显示一个链接。

    Subject:   "show_subjects", :id => @book.subject.id %>

    这将在索引页面上输出主题列表,以便用户可以直接访问它们。

    修改list.html.erb以将以下内容添加到文件顶部-

    • "show_subjects", :id => c.id %>

    现在,尝试使用http:// localhost:3000 / book / list浏览书籍。它将显示带有链接的所有主题,以便您可以浏览与该主题相关的所有书籍。

    列出主题

    接下来是什么?

    希望现在您对Rails的所有操作感到满意。

    下一章将说明如何使用布局更好地放置数据。我们将向您展示如何在Rails应用程序中使用CSS。