如何返回此ruby数组

时间:2012-09-24 18:57:52

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

我的Rails应用程序中有一个名为Player的表,在表中有七个布尔属性。

monday: true, tuesday: false, wednesday: true, thursday: false, friday: false, saturday: true, sunday: false

使用ActiveRecord的所有日期返回数组的最佳方法是什么?我想回来:

["monday", "wednesday", "saturday"]

有效方法的任何想法吗?我画的是空白? Player.first.map

2 个答案:

答案 0 :(得分:3)

假设您的意思是模型上有7个属性,您可以将方法添加到Player,如

def days
  ["monday", "tuesday", "wednesday", "thursday", "friday", 
    "saturday", "sunday"].select { |day| attributes[day] }
end

因此,对于您的示例,它只是

Player.first.days # => e.g. ["monday", "wednesday", "saturday"]

这是在模型实例上使用ActiveRecord attributes方法,该方法将值Hash的属性名称返回。


正如InternetSeriousBusiness所评论的那样,已经在Date类上定义了一组日期名称,因此您可以使用它并避免自己列出日期,但请注意那里的日期开始使用首字母大写字母,因此您需要downcase来匹配您的属性名称,例如

Date::DAYNAMES.select { |day| attributes[day.downcase] }

答案 1 :(得分:2)

您可以使用以下内容解决此问题:

p = Player.first

p.attributes.select{|k,v| v == true}.keys

希望它有所帮助。