如何从数据库中提取和显示数据

时间:2017-03-12 21:02:06

标签: ruby-on-rails

背景

我正在构建一个基本任务管理应用程序(以更好地理解Rails),您可以在其中输入任务的名称/描述并指出其优先级(通过说明它是否重要和/或紧急) 。基于重要性和紧迫性,我将其放入特定的象限/列表中。

当用户转到<ProgressBar... 时,我想:

  • 从数据库中提取所有任务
  • 遍历每个任务并将其显示在正确的象限/列表中

这是/tasks/index

的一部分
/controllers/tasks_controller.rb

我想在class TasksController < ApplicationController def index @tasks = Task.where(user_id: @user_id) end end 中附加每个任务的表使用以下结构和命名约定:

/views/tasks/index.html.erb

这里是@tasks部分(即<table> <tbody id="quadrant-X"> <!-- where 'X' is an integer, 1-4 --> <% @tasks.each do |task| %> <% render @tasks %> <% end %> </tbody> </table> ):

/views/tasks/_task.html.erb

问题

  1. 任务不会在表格中呈现(不会引发任何错误)
  2. 我需要一种可重用的方法来在适当的表格中呈现每个任务

1 个答案:

答案 0 :(得分:1)

您可以将整个表格包含在部分内容中,并将其渲染到您的每个表格的视图(app/views/tasks/index.html.erb)中。

app/views/tasks/_task.html.erb的示例:

<table>
  <tbody id="quadrant-<%= priority %>">
    <% @tasks.each do |task| %>
      <% if task.priority == priority %>
        <tr>
          <td><%= task.description %></td>
        </tr>
      <% end %>
    <% end %>
  </tbody>
</table>

app/views/tasks/index.html.erb的示例:

<h2>Priority 1</h2>
<%= render 'task', priority: 1 %>

<h2>Priority 2</h2>
<%= render 'task', priority: 2 %>

<h2>Priority 3</h2>
<%= render 'task', priority: 3 %>

<h2>Priority 4</h2>
<%= render 'task', priority: 4 %>

这样您就可以灵活地将每个列表放在视图中的任何位置,但这会带来成本,因为您将迭代任务列表4次(每个优先级为1)。

虽然您可以解决此问题,但如果将迭代移出部分并将其包含在视图中,则在脚本中插入正确的表(象限)上的每一行。

使用JQuery修改app/views/tasks/index.html.erb

<h2>Priority 1</h2>
<%= render 'task', priority: 1 %>

<h2>Priority 2</h2>
<%= render 'task', priority: 2 %>

<h2>Priority 3</h2>
<%= render 'task', priority: 3 %>

<h2>Priority 4</h2>
<%= render 'task', priority: 4 %>

<script type="text/javascript">
  <% @tasks.each do |task| %>
    $('#quadrant-<%= task.priority %>').append('<tr><td><%= task.description %></td></tr>');
  <% end %>
</script>

只需用您的变量替换硬编码的优先级数字(1..4),这至少应该指向正确的方向。