-1

我有一张很标准的Preferences桌子。我想列出其中每条记录的所有真正布尔值。我该怎么做呢?我知道这Preference.column_names会给我一切,但我需要每条记录的特定true设置。任何的想法?就像是

@preference.column_names do |c|
  c if c = true
end

谢谢!

4

2 回答 2

3

这是使用属性名称和值遍历对象属性的一般想法。您是否必须仅过滤布尔字段?还是所有字段都是布尔值?

@preference.attributes.each do |attr_name, attr_value|
  "#{attr_name} is #{attr_value}" if attr_value == true
end
于 2013-10-02T04:58:05.483 回答
1

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

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

然后,您可以使用send基于名称提取值,一个简单的“是它true”测试负责其余部分:

trues = booleans.select { |name| @preference.send(name) == true }
于 2013-10-02T05:02:07.353 回答