2

Railsアプリで名前が付けられたテーブルPlayerがあり、そのテーブルには7つのブール属性があります。

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

に当てはまるすべての日を含む配列を返すための最良の方法は何ActiveRecordですか?戻りたい:

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

これを行うための効率的な方法に関するアイデアはありますか?空白を描いていますか?Player.first.map

4

2 に答える 2

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"]

これは、属性名のを値にattributes返すモデルインスタンスのActiveRecordメソッドを利用しています。Hash


InternetSeriousBusinessがコメントしているように、クラスにはすでに曜日名の配列が定義されているDateので、それを使用して自分で曜日をリストするのを避けることができますが、そこにある日は最初の大文字で始まるためdowncase、属性名と一致します。例:

Date::DAYNAMES.select { |day| attributes[day.downcase] }
于 2012-09-24T19:02:23.720 に答える
2

この問題は、次のような方法で解決できます。

p = Player.first

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

それが役に立てば幸い。

于 2012-09-24T19:38:06.277 に答える