0

我有一个设施模型,它基本上有一堆布尔列。

我想在视图中显示真列,所以我想在模型级别过滤掉假列。

我最初的想法:

# 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.attributes是一个好主意。您可以value更严格地测试以过滤掉非布尔列。

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 回答