毎月トップの投票者を認識するレールの投票システムについてアドバイスが必要です。私は機能するシステムを持っていますが、レールは初めてなので、もっと効率的な方法が利用できると確信しています。以下は、私の現在のセットアップの簡略版です(コントローラーコードは省略されています):
class Charity < ActiveRecord::Base
has_many :votes
end
class Vote < ActiveRecord::Base
belongs_to :charity
end
私のスキーマは次のとおりです。
ActiveRecord::Schema.define(:version => 20130310015627) do
create_table "charities", :force => true do |t|
t.string "name"
t.text "description"
t.date "last_win"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
create_table "votes", :force => true do |t|
t.integer "charity_id"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
end
「whenever」gem を使用して cron ジョブを実行し、毎月の勝者を決定し、charities テーブルの「last_win」列を更新します。次のコードは、私の効率に疑問を呈している場所です。
vote_counts = Vote.count(:group => "charity_id")
most_votes = vote_counts.values.max
winning_ids = vote_counts.map{|k,v| v == most_votes ? k :nil }.compact
charities = Charity.find(winning_ids)
charities.each {|charity| charity.update_attributes(:last_win => Date.today)}
これをより良く行う方法はたくさんあると確信しており、いくつかの提案をいただければ幸いです。投票テーブル/関連付けを設定するためのより良い方法について提案がある場合は、それもいただければ幸いです。
前もってありがとう、CRS