Please use bkoski/slug unless you're looking for something very bare-bones. Minislug, like other slug implementations, generates a url-friendly id for your model object by converting or stripping undesirable characters from a source string that you specify.
Minislug abhors uniqueness checks because it is quite possible that you are slugging objects whose uniqueness needs are context-dependent, for example, in a multi-tenant application, you don't want globally-unique slugs. Or another example, if you manage family data, you might expect (in a typical euro-usa-latin culture), all children in a given family have unique first names. So when a parent logs in, he or she might understand urls like
http://example.com/children/john http://example.com/children/paul http://example.com/children/osiris
You have cleverly coded your application to not confuse children with the popular first name "Osiris", because you lookup children by slug and by family_id, where family_id is also a property of the current user. It would really suck to have urls such as
As a parent, I would feel belittled by the constant reminder that 33 little Osirisses got to your site before my little Osiris did, with his popular name casting a glow of irredeemable ordinariness about him.
Add this line to your application's Gemfile:
And then execute:
Or install it yourself as:
$ gem install minislug
class Person < ActiveRecord::Base sluggable :full_name end p = Person.new :full_name => "Jàmês Jöÿcè" p.slug # => "james-joyce" p.save Person.by_slug("james-joyce") # => <Person "full_name":"Jàmês Jöÿcè" "slug":"james-joyce">
No options, assumes "slug" attribute exists and is writable. No validations, no uniqueness checks.
- Fork it
- Create your feature branch (
git checkout -b my-new-feature)
- Commit your changes (
git commit -am 'Add some feature')
- Push to the branch (
git push origin my-new-feature)
- Create new Pull Request