2012-09-24 101 views
2

我在我的Rails應用程序中有一個名爲Player的表,並且在表格中有七個布爾屬性。如何返回此紅寶石陣列

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

什麼是返回與所有與ActiveRecord真天的數組的最佳方式?我想返回:

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

有效的方法來做到這一點的任何想法?我正在畫空白? Player.first.map

+0

請注意。告訴玩家表格/其中'monday:true ...'數據有更多一點的表格的結構.. –

回答

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] } 
+0

這正是我需要的......謝謝 – Trace

+3

您也可以使用Date :: DAYNAMES。 – InternetSeriousBusiness

2

可以解決這樣的問題:

p = Player.first 

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

希望它能幫助。

+0

如果你在播放表中添加布爾列「playing」,該怎麼辦? –