Awesome
EctoAutoslugField
ecto_autoslug_field
is a reusable Ecto
library which can automatically create slugs from other fields. We use slugify
as a default slug-engine.
We only depend on the ecto
package (we do not deal with ecto_sql
at all).
We support ecto >= 3.7 and ecto < 4
!
See this blog post for more information.
Installation
def deps do
[
{:ecto_autoslug_field, "~> 3.1"}
]
end
Options
There are several options to configure.
Required:
:to
- represents the slug field name where to save value to
Optional:
:from
- represents the source fields from which to build slug, if this option is not set you have to overrideget_sources/2
function:always_change
- if this option is set slug will be recreated from the given sources each timemaybe_generate_slug
function is called
Functions
get_sources/2
- this function is used to get sources for the slug, docs.build_slug/2
- this function is a place to modify the result slug, docs.
Examples
The simplest example:
defmodule EctoSlugs.Blog.Article.TitleSlug do
use EctoAutoslugField.Slug, from: :title, to: :slug
end
defmodule EctoSlugs.Blog.Article do
use Ecto.Schema
import Ecto.Changeset
alias EctoSlugs.Blog.Article
alias EctoSlugs.Blog.Article.TitleSlug
schema "blog_articles" do
field :breaking, :boolean, default: false
field :content, :string
field :title, :string
field :slug, TitleSlug.Type
timestamps()
end
def changeset(model, params \\ :invalid) do
model
|> cast(params, [:title, :content, :breaking])
|> validate_required([:title, :content])
|> unique_constraint(:title)
|> TitleSlug.maybe_generate_slug()
|> TitleSlug.unique_constraint()
end
end
See this tutorial for some more examples.
Changelog
See CHANGELOG.md.
Copyright and License
Copyright (c) 2016 Nikita Sobolev
This library is released under the MIT License. See the LICENSE.md file for further details.