app/models/poll.rb
class Poll < ActiveRecord::Base
has_many :choices, :dependent => :destroy
validates_presence_of :question
validates_presence_of :post
has_many :votes, :dependent => :destroy
belongs_to :post
def voted?(user)
!self.votes.find_by_user_id(user.id).nil?
end
def add_choices(choices)
choices.each do |description|
choice = self.choices.new(:description => description)
choice.save
end
end
def self.find_recent(options = {})
options.reverse_merge! :limit => 5
self.includes(:post => :user).order("polls.created_at desc").limit(options[:limit])
end
def self.find_popular(options = {})
options.reverse_merge! :limit => 5, :since => 10.days.ago
self.includes(:post => :user)
.where("polls.created_at > ?", options[:since])
.order("polls.votes_count desc")
.limit(options[:limit])
end
def self.find_popular_in_category(category, options = {})
options.reverse_merge! :limit => 5
self.includes(:post).order('polls.votes_count desc').where('posts.category_id = ?', category.id).references(:posts).limit(options[:limit])
end
end