Just like we do in the Budget module, and in some places in the Poll and Legislation modules, we don't need to specify the class name when the name of the relation matches the name of a class in the same module.
55 lines
1.7 KiB
Ruby
55 lines
1.7 KiB
Ruby
class Legislation::Question < ApplicationRecord
|
|
acts_as_paranoid column: :hidden_at
|
|
include ActsAsParanoidAliases
|
|
include Notifiable
|
|
|
|
translates :title, touch: true
|
|
include Globalizable
|
|
|
|
belongs_to :author, -> { with_hidden }, class_name: "User"
|
|
belongs_to :process, foreign_key: "legislation_process_id"
|
|
|
|
has_many :question_options, -> { order(:id) }, class_name: "Legislation::QuestionOption", foreign_key: "legislation_question_id",
|
|
dependent: :destroy, inverse_of: :question
|
|
has_many :answers, class_name: "Legislation::Answer", foreign_key: "legislation_question_id", dependent: :destroy, inverse_of: :question
|
|
has_many :comments, as: :commentable, dependent: :destroy
|
|
|
|
accepts_nested_attributes_for :question_options, reject_if: proc { |attributes| attributes.all? { |k, v| v.blank? } }, allow_destroy: true
|
|
|
|
validates :process, presence: true
|
|
validates_translation :title, presence: true
|
|
|
|
scope :sorted, -> { order("id ASC") }
|
|
|
|
def next_question_id
|
|
@next_question_id ||= process.questions.where("id > ?", id).sorted.limit(1).pluck(:id).first
|
|
end
|
|
|
|
def first_question_id
|
|
@first_question_id ||= process.questions.sorted.limit(1).pluck(:id).first
|
|
end
|
|
|
|
def answer_for_user(user)
|
|
answers.find_by(user: user)
|
|
end
|
|
|
|
def comments_for_verified_residents_only?
|
|
true
|
|
end
|
|
|
|
def comments_closed?
|
|
!comments_open?
|
|
end
|
|
|
|
def comments_open?
|
|
process.debate_phase.open?
|
|
end
|
|
|
|
def best_comments(number)
|
|
Comment.where(commentable_id: id)
|
|
.where(commentable_type: "Legislation::Question")
|
|
.order("cached_votes_up - cached_votes_down DESC")
|
|
.take(number)
|
|
end
|
|
end
|