123456789101112131415161718192021222324252627282930313233343536373839 |
- # frozen_string_literal: true
- # == Schema Information
- #
- # Table name: poll_votes
- #
- # id :bigint(8) not null, primary key
- # account_id :bigint(8)
- # poll_id :bigint(8)
- # choice :integer default(0), not null
- # created_at :datetime not null
- # updated_at :datetime not null
- # uri :string
- #
- class PollVote < ApplicationRecord
- belongs_to :account
- belongs_to :poll, inverse_of: :votes
- validates :choice, presence: true
- validates_with VoteValidator
- after_create_commit :increment_counter_cache
- delegate :local?, to: :account
- def object_type
- :vote
- end
- private
- def increment_counter_cache
- poll.cached_tallies[choice] = (poll.cached_tallies[choice] || 0) + 1
- poll.save
- rescue ActiveRecord::StaleObjectError
- poll.reload
- retry
- end
- end
|