Project

attr_slug

0.0
No commit activity in last 3 years
No release in over 3 years
An ActiveRecord concern to automatically generate slug fields.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

 Project Readme

AttrSlug

AttrSlug is an ActiveRecord concern that automatically generates slug fields using array of attributes.

Installation

To install add the line to your Gemfile:

gem 'attr_slug'

And run bundle install.

Usage

AttrSlug expects a slug column to exist on the model. It is good practice to add an unique index on the column.

# db/migrations/20180101000000_create_posts.rb
class CreatePosts < ActiveRecord::Migration[5.2]
  def change
    create_table :posts do |table|
      table.column :content, :text
      table.column :slug, :string, null: false, index: {unique: true)
      table.column :title, :string, null: false
    end
  end
end

You then include the AttrSlug module in your model class and use the attr_slug macro to set your fields you wish to use to derive it's slug.

# app/models/post.rb
class Post < ActiveRecord::Base
  include AttrSlug

  attr_slug :title, :id

  validates :slug, presence: true, uniqueness: true
  validates :title, presence: true
end

Using the examples above, creating a Post instance will automatically generate the slug field:

post = Post.create title: "Test Post"
post.slug # "test-post-1234"

AttrSlug doesn't modify any ActiveRecord finders. To automatically use the slug in URLs override the model's to_param method:

# app/models/post.rb
class Post < ActiveRecord::Base
  ...

  def to_param # overridden
    slug
  end
end

You should then use the following to retrieve your models in the controller:

def show
  @post = Post.find_by(slug: params[:id])
end

To autoload AttrSlug for all models, add the following to an initializer:

require 'attr_slug/active_record'

You then don't need to include AttrSlug in any model.

Dependencies

AttrSlug gem has the following runtime dependencies:

  • activerecord >= 5.1.4
  • activesupport >= 5.1.4

Compatibility

Tested with MRI 2.4.2 against Rails 5.2.2.

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

Credit

This gem was written and is maintained by Jurgen Jocubeit, CEO and President Brightcommerce, Inc.

License

The gem is available as open source under the terms of the MIT License.

Copyright

Copyright 2018 Brightcommerce, Inc.