1

Railsビューでこの状況をよりコンパクトにする方法はありますか?

例:私はhamlを持っています

= object.count unless object.count ==0

私はそこで機能を繰り返しているのが好きではありません、私はむしろ次のようなものが欲しいです

= object.count unless ==0

たとえば、もっと複雑なステートメントがあった場合

= object.relations.where(attribute: "something").count unless zero?

私はそれを2行に分割することができます

- cnt = object.relations.where(attribute: "something").count
= cnt unless cnt==0

しかし、状況ごとに複数の行があり、一度使用する変数を格納するのは面倒です。

編集:詳しく説明するために、数値が0であるかどうかを確認し、そうでない場合は何も表示しません。そのように見ると見栄えが良くなります。

アップデート:

作成された回答の1つは、これらの線に沿った解決策を考え出します

class Object
  def unless
    self unless yield(self)
  end
end

したがって、ブロックを使用して、持っているオブジェクトを呼び出すことができます。.unless{|c| c<1}

これにより、条件文に取り組むことができ、何が起こっているのかをかなり明確に保つことができます:)、ボーナスは、ブロック駆動型であるため、任意のオブジェクトでこれを使用できます:P。

みんな、ありがとう :)

さらに更新

|c|ブロックに吸い込まれている。だから私はAPIを調べてそれも変更しました

class Object
  def unless(&block)
    self unless instance_eval(&block)
  end
end

これで、.count.unless {zero?}を使用してこれを実行できます:P。または、複雑な状態の場合は、それを追加することもできます|c|

4

4 に答える 4

3

object が使用できる配列の場合object.empty?(またはobject.any?その逆の場合)

于 2012-08-02T08:06:09.267 に答える
3

ビュー ヘルパーを作成するだけです。

def display_count_or_nothing(array)
  array.count unless array.count == 0
end

ビューでは、次のように使用できます。

<%= display_count_or_nothing(array) %>
于 2012-08-02T09:10:41.230 に答える
2

変数「オブジェクト」は嫌いですが、変数の名前が配列の内容を(複数として)記述していれば、もっといいでしょう。

= object.count unless object.empty?
于 2012-08-02T11:08:16.793 に答える
1

これが約のみcountの場合は、モンキー パッチを適用できますEnumerable

module Enumerable
  def count_or_empty_string
    self.any? ? self.count : ''
  end
end

object列挙可能な場合、これを行うことができます:

= object.count_or_empty_string

これは、それ以外の""場合object.count == 0は整数を返します。unlessそのため、ifHAML はもう必要ありません。

于 2012-08-02T08:31:31.173 に答える