Module: SaltySlugs::ActiveRecord::SlugMethods

Defined in:
lib/salty_slugs/active_record.rb

Defined Under Namespace

Modules: ClassMethods, Columns, InstanceMethods

Instance Method Summary collapse

Instance Method Details

#has_slug(options = {}) ⇒ Object

Configuration options are:

:slug_column - column for save slug
:source_column - source column for generate slug
:prepend_id - method to_param return ':id-:slug' or ':slug'
:sync_slug - regenerate slug on record update
:scope - for validation

Usage: class Post < ActiveRecord::Base

has_slug :slug_column => 'permalink', :source_column => 'name'

end



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/salty_slugs/active_record.rb', line 21

def has_slug(options = {})
  unless included_modules.include? InstanceMethods
    extend ClassMethods
    extend Columns
    include InstanceMethods
    include Columns
  end

  options = {
      :slug_column => 'slug',
      :source_column => 'title',
      :prepend_id => true,
      :sync_slug => false,
      :scope => nil
    }.merge(options)
  
  if options[:scope].is_a?(Symbol) && options[:scope].to_s !~ /_id$/
    options[:scope] = "#{options[:scope]}_id".intern
  end
  
  write_inheritable_attribute :salty_slugs_options, options
  class_inheritable_reader :salty_slugs_options

  unless slug_prepend_id
    slug_scope_fields ? (validates_uniqueness_of slug_column, :scope => slug_scope_fields) : (validates_uniqueness_of slug_column)
  end

  before_validation { |record| record[slug_column] = (sync_slug || record[slug_column].blank?) ? SaltySlugs::Utils.sluggify(record.send(slug_source_column)) : SaltySlugs::Utils.sluggify(record[slug_column]) }
end