Rails:列表列名称,如果为true

时间:2013-10-02 04:27:43

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord rails-activerecord

我有一张非常标准的Preferences表。我想列出其中每条记录的所有真正的布尔值。我该怎么办呢?我知道Preference.column_names会给我所有,但我需要每个记录的特定true设置。任何的想法?像

这样的东西
@preference.column_names do |c|
  c if c = true
end

谢谢!

2 个答案:

答案 0 :(得分:3)

以下是使用属性名称和值循环对象属性的一般概念。你是否只需过滤掉布尔字段?或者所有字段都是布尔值?

@preference.attributes.each do |attr_name, attr_value|
  "#{attr_name} is #{attr_value}" if attr_value == true
end

答案 1 :(得分:1)

首先你需要知道布尔列,这样的东西应该给你他们的名字:

booleans = Model.columns.select { |c| c.type == :boolean }.map(&:name)

然后,您可以使用send根据名称提取值,并使用简单的“是true”测试来处理其余内容:

trues = booleans.select { |name| @preference.send(name) == true }