63 lines
1.9 KiB
Ruby
63 lines
1.9 KiB
Ruby
class Poll::Question < ActiveRecord::Base
|
|
include Measurable
|
|
|
|
acts_as_paranoid column: :hidden_at
|
|
include ActsAsParanoidAliases
|
|
|
|
belongs_to :poll
|
|
belongs_to :author, -> { with_hidden }, class_name: 'User', foreign_key: 'author_id'
|
|
|
|
has_many :comments, as: :commentable
|
|
has_many :answers
|
|
has_and_belongs_to_many :geozones
|
|
belongs_to :proposal
|
|
|
|
validates :title, presence: true
|
|
validates :question, presence: true
|
|
validates :summary, presence: true
|
|
validates :author, presence: true
|
|
|
|
validates :title, length: { in: 4..Poll::Question.title_max_length }
|
|
validates :description, length: { maximum: Poll::Question.description_max_length }
|
|
validates :question, length: { in: 10..Poll::Question.question_max_length }
|
|
|
|
scope :sort_for_list, -> { order('proposal_id IS NULL', :created_at)}
|
|
scope :for_render, -> { includes(:author, :proposal) }
|
|
scope :by_geozone, -> (geozone_id) { joins(:geozones).where(geozones: {id: geozone_id}) }
|
|
|
|
def description
|
|
super.try :html_safe
|
|
end
|
|
|
|
def valid_answers
|
|
(super.try(:split, ',').compact || []).map(&:strip)
|
|
end
|
|
|
|
def copy_attributes_from_proposal(proposal)
|
|
if proposal.present?
|
|
self.author = proposal.author
|
|
self.author_visible_name = proposal.author.name
|
|
self.proposal_id = proposal.id
|
|
self.title = proposal.title
|
|
self.description = proposal.description
|
|
self.summary = proposal.summary
|
|
self.question = proposal.question
|
|
self.geozones = Geozone.all
|
|
end
|
|
end
|
|
|
|
def answerable_by?(user)
|
|
user.present? && poll.current? && (self.all_geozones || self.geozone_ids.include?(user.geozone_id))
|
|
end
|
|
|
|
def self.answerable_by(user)
|
|
return where(false) unless user.present?
|
|
where(poll_id: Poll.current.pluck(:id))
|
|
.joins(:geozones)
|
|
.where('poll_questions.all_geozones = ? or geozones.id = ?',
|
|
true,
|
|
user.geozone_id || -1) # user.geozone_id can be nil, which would throw errors on sql
|
|
end
|
|
|
|
end
|