Model 获取模型的实际数据
假设我已经有了一些模型,过了一段时间,我将在另一个函数中更改这个模型的一些字段 有没有什么好方法可以不使用标准的“Model 获取模型的实际数据,model,elixir,ecto,phoenix,Model,Elixir,Ecto,Phoenix,假设我已经有了一些模型,过了一段时间,我将在另一个函数中更改这个模型的一些字段 有没有什么好方法可以不使用标准的“MyRepo.get(MyModel,model.id)”就从DB获取模型的实际数据(状态) case MyModel.create(attr) do {:ok, model} -> ...some code... # here model will update Task.start(fn -> Model.do_some(model) en
MyRepo.get(MyModel,model.id)
”就从DB获取模型的实际数据(状态)
case MyModel.create(attr) do
{:ok, model} ->
...some code...
# here model will update
Task.start(fn -> Model.do_some(model) end)
# here I need model with actual data from DB
{:reply, {:ok, ModelView.render("show.json", model: model)}, socket}
{:error, message} ->
...some code...
end
另外,模型可以有一些预加载的关联,而不是重新加载模型,您应该使用
模型的结果。do_some(model)
,这将返回更新的模型
因为即使在Task.start
之后重新加载模型,也无法确定model.do\u some(model)
是否已执行,因为它是在新任务中异步启动的
因此,您可以在与调用方相同的过程中执行此操作:
case MyModel.create(attr) do
{:ok, model} ->
model = Model.do_some(model)
{:reply, {:ok, ModelView.render("show.json", model: model)}, socket}
{:error, message} ->
end
或者在一项新任务中(但我不确定会有什么好处)
但是,要回答您的主要问题:否,无法自动重新加载模型
您仍然需要手动预加载关联。您应该使用
模型的结果,而不是重新加载模型。执行一些(模型)
,这将返回更新的模型
因为即使在Task.start
之后重新加载模型,也无法确定model.do\u some(model)
是否已执行,因为它是在新任务中异步启动的
因此,您可以在与调用方相同的过程中执行此操作:
case MyModel.create(attr) do
{:ok, model} ->
model = Model.do_some(model)
{:reply, {:ok, ModelView.render("show.json", model: model)}, socket}
{:error, message} ->
end
或者在一项新任务中(但我不确定会有什么好处)
但是,要回答您的主要问题:否,无法自动重新加载模型 您仍然需要手动预加载关联
def refresh(%module{id: id}) do
get(module, id)
end