在视图内部调用查询(控制器操作)

时间:2017-05-31 06:48:28

标签: html mysql ruby-on-rails ruby controller

我正在尝试创建一个主要按日期显示每个相应字段的数字的表。我只有一个这个模型

查看:

<table class="table-table-verif">
      <thead class="fixed_headers">
      <tr id = "thead-title">
        <th>Date</th>
        <th># True Positive</th>
        <th># True Negative</th>
        <th># False Positive</th>
        <th># False Negative</th>
      </tr>
      </thead>

      <tbody>
       <% @verification.each do |s| %>
        <tr id="thead-value">
          // what to do here?
        </tr>
       <% end %>
      </tbody>
    </table>

我想在我的控制器中调用这些查询。

控制器:

  def date
    @verification = Verification.group(:Date).where("Findings = ? or Findings = ?", 'False Positive','False Negative').order(Date: :asc).count
  end

  def number_true_positive
    Verification.group(Date).where("Findings = ?", 'True Positive').order(Date: :asc).count
  end

  def number_false_positive
    Verification.group(:Date).where("Findings = ?", 'False Positive').order(Date: :asc).count
  end

  def number_true_negative
    Verification.group(:Date).where("Findings = ?", 'True Negative').order(Date: :asc).count
  end

  def number_false_negative
    Verification.group(:Date).where("Findings = ?", 'False Negative').order(Date: :asc).count
  end

每列应计算相应记录的数量,并根据日期将数字放在各自的<th>上。

什么是更好的方法?

1 个答案:

答案 0 :(得分:2)

我在代码中看到很多重复,您可以为每个子查询创建scopes,并且可以有多个组合。

verification.rb

scope :date_grouped, -> { group(:Date) }

scope :falsy, -> { where("Findings = ? or Findings = ?", 'False Positive','False Negative') }

scope :truthy, -> { where("Findings = ? or Findings = ?", 'True Positive','True Negative') }

scope :findings_by, -> (value) { where(Findings: value) }

scope :date_asc, -> { order(Date: :asc) }

现在您可以根据需要调用它们。

e.g。

<%= Verification.date_grouped.falsy.date_asc %>
<%= Verification.date_grouped.truthy.date_asc %>
<%= Verification.date_grouped.findings_by('True Positive').date_asc %>