我的Rails应用程序中有一个名为Player
的表,在表中有七个布尔属性。
monday: true, tuesday: false, wednesday: true, thursday: false, friday: false, saturday: true, sunday: false
使用ActiveRecord
的所有日期返回数组的最佳方法是什么?我想回来:
["monday", "wednesday", "saturday"]
有效方法的任何想法吗?我画的是空白? Player.first.map
?
答案 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
希望它有所帮助。