Sha256: 41973346f5668d1fd91585b6af0e5128ce4758c217ed86e90d0cfa78dbebb5b4

Contents?: true

Size: 1.39 KB

Versions: 7

Compression:

Stored size: 1.39 KB

Contents

# frozen_string_literal: true

module Decidim
  module Surveys
    # The data store for a SurveyAnswer in the Decidim::Surveys component.
    class SurveyAnswer < Surveys::ApplicationRecord
      include Decidim::DataPortability

      belongs_to :user, class_name: "Decidim::User", foreign_key: "decidim_user_id"
      belongs_to :survey, class_name: "Survey", foreign_key: "decidim_survey_id"
      belongs_to :question, class_name: "SurveyQuestion", foreign_key: "decidim_survey_question_id"

      has_many :choices,
               class_name: "SurveyAnswerChoice",
               foreign_key: "decidim_survey_answer_id",
               dependent: :destroy,
               inverse_of: :answer

      validates :body, presence: true, if: -> { question.mandatory_body? }
      validates :choices, presence: true, if: -> { question.mandatory_choices? }

      validate :user_survey_same_organization
      validate :question_belongs_to_survey

      def self.user_collection(user)
        where(decidim_user_id: user.id)
      end

      def self.export_serializer
        Decidim::Surveys::SurveyUserAnswersSerializer
      end

      private

      def user_survey_same_organization
        return if user&.organization == survey&.organization
        errors.add(:user, :invalid)
      end

      def question_belongs_to_survey
        errors.add(:survey, :invalid) if question&.survey != survey
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
decidim-surveys-0.14.4 app/models/decidim/surveys/survey_answer.rb
decidim-surveys-0.14.3 app/models/decidim/surveys/survey_answer.rb
decidim-surveys-0.14.2 app/models/decidim/surveys/survey_answer.rb
decidim-surveys-0.14.1 app/models/decidim/surveys/survey_answer.rb
decidim-surveys-0.13.1 app/models/decidim/surveys/survey_answer.rb
decidim-surveys-0.13.0 app/models/decidim/surveys/survey_answer.rb
decidim-surveys-0.13.0.pre1 app/models/decidim/surveys/survey_answer.rb