validates input_options based on input type
This commit is contained in:
@ -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
|
||||
|
11
app/validators/input_options_presence_validator.rb
Normal file
11
app/validators/input_options_presence_validator.rb
Normal 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
|
Reference in New Issue
Block a user