- # 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
|