validates input_options based on input type

This commit is contained in:
Mark Moser
2016-08-22 11:49:02 -05:00
parent 404555f674
commit bdec83b3b6
5 changed files with 89 additions and 7 deletions

View File

@ -4,8 +4,17 @@ class Question < ApplicationRecord
has_many :answers
belongs_to :quiz
validates_presence_of :quiz_id
validates_presence_of :question
validates_presence_of :category
validates_presence_of :input_type
before_validation :compact_input_options
validates :quiz_id, presence: true
validates :question, presence: true
validates :category, presence: true
validates :input_type, presence: true
validates :input_options, input_options_presence: true
private
def compact_input_options
self.input_options = input_options.reject(&:blank?)
end
end

View File

@ -0,0 +1,11 @@
class InputOptionsPresenceValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
return true unless record.input_type =~ /radio|check/i
return true if value.present? && value.count > 0
record.errors[attribute] << (options[:message] ||
"You must provide answer options for the selected input type.")
false
end
end