@@ -49,79 +49,39 @@ Optional:
4949The simplest example:
5050
5151``` elixir
52- defmodule NameSlug do
53- use EctoAutoslugField .Slug , from: :name , to: :slug
52+ defmodule EctoSlugs . Blog . Article . TitleSlug do
53+ use EctoAutoslugField .Slug , from: :title , to: :slug
5454end
5555
56- defmodule User do
56+ defmodule EctoSlugs . Blog . Article do
5757 use Ecto .Schema
5858 import Ecto .Changeset
59+ alias EctoSlugs .Blog .Article
60+ alias EctoSlugs .Blog .Article .TitleSlug
5961
60- schema " users" do
61- field :name , :string
62- field :slug , NameSlug .Type
63- end
64-
65- @required_fields ~w( name)
66- @optional_fields ~w( slug)
67-
68- def changeset (model, params \\ :empty ) do
69- model
70- |> cast (params, @required_fields , @optional_fields )
71- |> NameSlug .maybe_generate_slug
72- |> NameSlug .unique_constraint
73- end
74- end
75- ```
76-
77- More complex example:
78-
79- ``` elixir
80- defmodule ComplexSlug do
81- use EctoAutoslugField .Slug , to: :slug
82-
83- def get_sourses (changeset, _opts ) do
84- # This function is used to get sources to build slug from:
85- base_fields = [:title ]
86-
87- if get_change (changeset, :breaking , false ) do
88- base_fields ++ [" breaking" ]
89- else
90- base_fields
91- end
92- end
62+ schema " blog_articles" do
63+ field :breaking , :boolean , default: false
64+ field :content , :string
65+ field :title , :string
9366
94- def build_slug (sources, _changeset ) do
95- # Custom slug building rule:
96- sources
97- |> Enum .join (" -" )
98- |> Slugger .slugify_downcase
99- |> String .replace (" -" , " +" )
100- end
101- end
67+ field :slug , TitleSlug .Type
10268
103- defmodule Article do
104- use Ecto .Schema
105- import Ecto .Changeset
106-
107- schema " articles" do
108- field :title , :string
109- field :breaking , :boolean
110- field :slug , ComplexSlug .Type
69+ timestamps ()
11170 end
11271
113- @required_fields ~w( title breaking)
114- @optional_fields ~w( slug)
115-
116- def changeset (model, params \\ :empty ) do
117- model
118- |> cast (params, @required_fields , @optional_fields )
119- |> ComplexSlug .maybe_generate_slug
120- |> ComplexSlug .unique_constraint
72+ def changeset (%Article {} = article, attrs) do
73+ article
74+ |> cast (attrs, [:title , :content , :breaking ])
75+ |> validate_required ([:title , :content ])
76+ |> unique_constraint (:title )
77+ |> TitleSlug .maybe_generate_slug
78+ |> TitleSlug .unique_constraint
12179 end
12280end
12381```
12482
83+ More complex examples are cover in [ this tutorial] ( https://medium.com/wemake-services/creating-slugs-for-ecto-schemas-7349513410f0 ) .
84+
12585## Changelog
12686
12787See [ CHANGELOG.md] ( https://github.com/sobolevn/ecto_autoslug_field/blob/master/CHANGELOG.md ) .
0 commit comments