Каков наилучший подход к добавлению вычисляемого значения при создании/вставке? Должен ли я создать уникальный набор изменений как для создания, так и для обновления?
Скажем, например, у меня есть модель поста в блоге, и я хочу создать значение заголовка и сохранить его. Это немного надумано, но скажем, по какой-то причине я хочу установить его только при создании, а не при обновлении. Должен ли я сделать что-то вроде следующего?
defmodule MyBlog.Post do
use MyBlog.Web, :model
schema "posts" do
field :title, :string
field :title_slug, :string
field :content, :text
timestamps
end
@required_fields ~w(
title
content
)
@optional_fields ~w()
def create_changeset(model, params \\ :empty) do
changeset(model, params)
|> generate_title_slug
end
defp changeset(model, params \\ :empty) do
model
|> cast(params, @required_fields, @optional_fields)
end
defp generate_title_slug(changeset) do
put_change(changeset, :title_slug, __some_slug_generation_code__)
end
def update_changeset(model, params \\ :empty) do
changeset(model, params)
end
end