Sha256: 6359dd167542b04917c0b19984abcd74d704a6a332f2a9be3c3c985cae562e54

Contents?: true

Size: 1.78 KB

Versions: 2

Compression:

Stored size: 1.78 KB

Contents

module Binda
	class FieldGroup < ApplicationRecord

		# Associations
		belongs_to :structure

		# use destroy not delete_all otherwise the field settings 
		# won't be able to delete all their dependent content
		has_many :field_settings, dependent: :destroy

		# Validations
		validates :name, presence: {
			message: I18n.t("binda.field_group.validation_message.name")
		}
		validate :slug_uniqueness
		validates_associated :field_settings
		accepts_nested_attributes_for :field_settings, allow_destroy: true, reject_if: :is_rejected

		# Slug
		extend FriendlyId
		friendly_id :default_slug, use: [:slugged, :finders]

		after_create :update_position

		# Friendly id preference on slug generation
		#
		# Method inherited from friendly id 
		# @see https://github.com/norman/friendly_id/issues/436
	  def should_generate_new_friendly_id?
	    slug.blank?
	  end

		# Set slug name
		#
		# It generates 4 possible slugs before falling back to FriendlyId default behaviour
		def default_slug
			[ "#{ self.structure.name }-#{ self.name }",
				"#{ self.structure.name }-#{ self.name }-1",
				"#{ self.structure.name }-#{ self.name }-2",
				"#{ self.structure.name }-#{ self.name }-3" ]
		end

		#
		# Sets the validation rules to accept and save an attribute
		def is_rejected( attributes )
			attributes['name'].blank? && attributes['field_type'].blank?
		end

		def slug_uniqueness
			record_with_same_slug = self.class.where(slug: slug)
			if record_with_same_slug.any? && !record_with_same_slug.ids.include?(id)
				errors.add(:slug, I18n.t("binda.field_group.validation_message.slug", { arg1: slug }))
				return false
			else
				return true
			end
		end

		private 

			def update_position
				if self.position.nil?
					self.update_attribute('position', self.structure.field_groups.length)
				end
			end

	end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
binda-0.1.5 app/models/binda/field_group.rb
binda-0.1.4 app/models/binda/field_group.rb