检查表列是否具有任何值

时间:2013-09-10 09:08:03

标签: ruby-on-rails

我的模型名为shirt,其中有一个名为fabric的字段, 在控制器中我有;

@fabrics = Shirt.uniq.pluck(:fabric)

在视图中,我想显示<div>...</div>,但前提是fabric表的shirts列至少包含一个值。我试过了:

<% if @fabrics != nil %>
  <div>
    ...
  </div>
<% end %>

但即使整个列没有值,<div>仍然可见。我也试过

<%if @fabrics != blank %>没有成功。 在渲染div之前,如何检查列是否为空?

3 个答案:

答案 0 :(得分:2)

尝试

<% unless @fabrics.blank? %>

答案 1 :(得分:2)

Shirt.uniq.pluck(:fabric)返回Relation。因此,它永远不会是nil

这个Relation定义了sql查询的一部分。这说:在数据库中给我(所有|一个)唯一的结构值。要实际运行该查询,需要在该关系上调用一个触发数据库调用的方法:{{ 1}},allfirsteachany? ......

由于缺乏上下文,我不知道你如何使用blank?模型。但我想查询永远不会给你预期的答案。因为只要该表中至少有一行,Shirt将始终返回一些内容。想象一下,表格中只有一行,Shirt.uniq.pluck(:fabric)fabric,而nilShirt.uniq.pluck(:fabric).blank?确定为Shirt.uniq.pluck(:fabric)。并[nil]

如果您使用某件特定衬衫,请使用[nil].blank? == false如果您想知道数据库中是否至少有一件衬衫没有布料@shirt.fabric.present?

我建议阅读:

答案 2 :(得分:1)

在控制器中试试

@fabrics = Shirt.uniq.pluck(:fabric).reject { |f| f.nil? || f.empty? }