1

shirtという名前のフィールドを持つモデルという名前がfabricあります。私が持っているコントローラーには;

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

ビューに表示したいのは、テーブルの列に少なくとも1つの値が含まれて<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 クエリの一部を定義します。これは、次のことを意味します:データベース内のファブリックの一意の値 (すべて|1 つ) を教えてください。そのクエリを実際に実行するには、そのリレーションでデータベース呼び出しをトリガーするメソッドを呼び出す必要があります: allfirsteachany?blank?...

Shirtコンテキストが不足しているため、モデルをどのように使用しているかわかりません。しかし、クエリが期待される答えを与えることは決してないと思います。Shirt.uniq.pluck(:fabric)そのテーブルに少なくとも1つの行がある限り、常に何かを返すためです。テーブルに行が 1 つしかなく、それが であることを想像fabricしてください。とnilShirt.uniq.pluck(:fabric).blank?Shirt.uniq.pluck(:fabric)[nil][nil].blank? == false

特定の 1枚の@shirt.fabric.present?シャツを扱っている場合は、db に生地のないシャツが少なくとも 1 枚あるかどうかを知りたい場合に使用します。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 に答える