Sha256: 4e08a9a329aeb77e0a0aa6d2ac9933fce47d49fc158ac2fc63e12e3102509cc9
Contents?: true
Size: 1.57 KB
Versions: 1
Compression:
Stored size: 1.57 KB
Contents
module Sluggable extend ActiveSupport::Concern included do before_validation :generate_slug before_save :parameterize_slug, if: :will_save_change_to_slug? # validates :slug, presence: true, uniqueness: true scope :by_slug, -> (orderer = :asc) { order(slug: orderer) } def self.sluggable? true end def sluggable? true end # Override this method to define which attribute the slug is created from, or # have this method return false to use a random slug def slug_attribute if respond_to?(:title) title elsif respond_to?(:name) name else raise Forest::Error.new("Slug attribute :title does not exist on #{self.class.name}. Define a `slug_attribute` method with a valid attribue.") end end def generate_slug return unless generate_slug? if slug_attribute.present? slug_attr = slug_attribute.parameterize if slug_as_key? slug_attr = slug_attribute.parameterize.underscore end else slug_attr = SecureRandom.uuid end self.slug = slug_attr if self.class.find_by_slug(slug_attr).present? self.slug = "#{slug_attr}-#{SecureRandom.uuid}" end end def generate_slug? self.slug.blank? end # Override slug_as_key? in models like settings where the slug should be underscored, not dasherized def slug_as_key? false end def to_friendly_param slug end private def parameterize_slug self.slug = slug.parameterize end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
forest_cms-0.98.1 | app/models/concerns/sluggable.rb |