1

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

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

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

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

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

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

4

3 回答 3

2

尝试

<% unless @fabrics.blank? %>
于 2013-09-10T09:10:21.200 回答
2

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

Relation定义了 sql 查询的一部分。这说:给我(所有|一个)数据库中织物的唯一值。要实际运行该查询,您需要在该关系上调用一个触发数据库调用的方法:all, first, each, any?, blank?...

由于缺乏上下文,我不知道您如何使用您的Shirt模型。但我猜这个查询永远不会给你预期的答案。因为Shirt.uniq.pluck(:fabric)只要该表中至少有一行,总会返回一些东西。想象一下,表中只有一行,它fabricnil,而不是Shirt.uniq.pluck(:fabric).blank?确定。和Shirt.uniq.pluck(:fabric)[nil][nil].blank? == false

如果您在一件特定的衬衫上工作,请使用@shirt.fabric.present?如果您想知道数据库中是否至少有一件衬衫没有面料Shirt.where(fabric: nil).any?

我建议阅读:

于 2013-09-10T09:56:23.473 回答
1

在控制器中试试这个

@fabrics = Shirt.uniq.pluck(:fabric).reject { |f| f.nil? || f.empty? }
于 2013-09-10T09:46:51.490 回答