Module: FriendlyId::ClassMethods
- Defined in:
- lib/friendly_id.rb
Instance Method Summary collapse
-
#has_friendly_id(column, options = {}, &block) ⇒ Object
Set up an ActiveRecord model to use a friendly_id.
Instance Method Details
#has_friendly_id(column, options = {}, &block) ⇒ Object
Set up an ActiveRecord model to use a friendly_id.
The column argument can be one of your model’s columns, or a method you use to generate the slug.
Options:
-
:use_slug
- Defaults to false. Use slugs when you want to use a non-unique text field for friendly ids. -
:max_length
- Defaults to 255. The maximum allowed length for a slug. -
:strip_diacritics
- Defaults to false. If true, it will remove accents, umlauts, etc. from western characters. -
:strip_non_ascii
- Defaults to false. If true, it will all non-ascii ([^a-z0-9]) characters. -
:reserved
- Array of words that are reserved and can’t be used as friendly_id’s. For sluggable models, if such a word is used, it will be treated the same as if that slug was already taken (numeric extension will be appended). Defaults to [“new”, “index”]. -
:reserved_message
- The validation message that will be shown when a reserved word is used as a frindly_id. Defaults to ‘“%s” is reserved’.
You can also optionally pass a block if you want to use your own custom slugnormalization routines rather than the default ones that come with friendly_id:
require 'stringex'
class Post < ActiveRecord::Base
has_friendly_id :title, :use_slug => true do |text|
# Use stringex to generate the friendly_id rather than the baked-in methods
text.to_url
end
end
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/friendly_id.rb', line 59 def has_friendly_id(column, = {}, &block) .assert_valid_keys VALID_FRIENDLY_ID_KEYS = DEFAULT_FRIENDLY_ID_OPTIONS.merge().merge(:column => column) write_inheritable_attribute :friendly_id_options, class_inheritable_accessor :friendly_id_options class_inheritable_reader :slug_normalizer_block if [:use_slug] has_many :slugs, :order => 'id DESC', :as => :sluggable, :dependent => :destroy require 'friendly_id/sluggable_class_methods' require 'friendly_id/sluggable_instance_methods' extend SluggableClassMethods include SluggableInstanceMethods before_save :set_slug if block_given? write_inheritable_attribute :slug_normalizer_block, block end else require 'friendly_id/non_sluggable_class_methods' require 'friendly_id/non_sluggable_instance_methods' extend NonSluggableClassMethods include NonSluggableInstanceMethods validate :validate_friendly_id end end |