如果不推荐使用回调https://github.com/elixir-lang/ecto/issues/1114而Multi尚未实施,我应该怎么做?
答案 0 :(得分:4)
您可以在变更集中调用“回调”功能。因此,例如,如果您有一个用于创建需要生成标识符GUID的产品的变更集,则可能已使用回调实现了此功能。
defmodule Product do
before_insert :generate_identifier
defp generate_identifier(changeset) do
...
end
end
现在你可以在你的变更集功能中调用它,这更明确。
defmodule Product do
def create_changeset(model, attrs) do
model
|> cast(attrs, @required_fields, @optional_fields)
|> generate_identifier
|> validate_present(:name)
end
defp generate_identifier(changeset) do
...
end
end
您可以管道验证器和其他类型的回调。
答案 1 :(得分:0)
这取决于您要替换的回调。
正如Jason所说,对于before_insert
,只需在变更集中调用一个函数。
如果您要替换before_update
,after_update
或after_delete
,请创建一个功能,将所有内容包含在事务中。
我无法想到一个无法以这种方式处理的案例,但如果你这样做,请用特定的用例更新你的问题。