0

基本的にブール列がたくさんあるアメニティモデルがあります。

ビューにTrue列を表示したいので、モデルレベルでFalse列を除外したいと思います。

私の最初の考え:

# in model file
 def available
    a = {}
    self.attributes.each do |key, value|
      if value
        a[key] = value
      end
    end
    a
  end

id、created_at、およびmodified_at列が表示されるため、これは完全ではありません。

これを達成するためのより良い方法があるに違いないと私は感じています。

4

2 に答える 2

1

繰り返すのはいい考えだと思いますself.attributesvalueブール値以外の列を除外するために、もう少し厳密にテストすることができます。

a[key] = value if [TrueClass, FalseClass].include? value.class
于 2012-11-05T02:29:35.020 に答える
0

@Deefourの提案を使用して、私はこれに行き着きました:

  def available
    a = {}
    hidden = ["id","created_at","updated_id","business_id"]
    self.attributes.each do |key, value|
      a[key] = value if value.class == TrueClass
      a[key] = value if [String].include? value.class and not value.empty?
      a[key] = value if not hidden.include? key and value.class == Fixnum
    end
    a
  end
于 2012-11-05T02:51:05.560 に答える