我的模型名为shirt
,其中有一个名为fabric
的字段,
在控制器中我有;
@fabrics = Shirt.uniq.pluck(:fabric)
在视图中,我想显示<div>...</div>
,但前提是fabric
表的shirts
列至少包含一个值。我试过了:
<% if @fabrics != nil %>
<div>
...
</div>
<% end %>
但即使整个列没有值,<div>
仍然可见。我也试过
<%if @fabrics != blank %>
没有成功。
在渲染div之前,如何检查列是否为空?
答案 0 :(得分:2)
尝试
<% unless @fabrics.blank? %>
答案 1 :(得分:2)
Shirt.uniq.pluck(:fabric)
返回Relation
。因此,它永远不会是nil
。
这个Relation
定义了sql查询的一部分。这说:在数据库中给我(所有|一个)唯一的结构值。要实际运行该查询,需要在该关系上调用一个触发数据库调用的方法:{{ 1}},all
,first
,each
,any?
......
由于缺乏上下文,我不知道你如何使用blank?
模型。但我想查询永远不会给你预期的答案。因为只要该表中至少有一行,Shirt
将始终返回一些内容。想象一下,表格中只有一行,Shirt.uniq.pluck(:fabric)
为fabric
,而nil
将Shirt.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? }