如何访问Elixir中的当前模块

NoD*_*ame 6 elixir phoenix-framework

假设我有一个模块MyApp.User,它有以下方法:

def update_some_counter(user) do
  from(u in MyApp.User , where: u.id == ^user.id)
  |> Repo.update_all(inc: [some_counter: 1])
end
Run Code Online (Sandbox Code Playgroud)

有没有办法MyApp.User在上面的代码中更改一些检索当前模块的方法?

Jos*_*lim 16

帕特里克的答案是正确的:你可以使用__MODULE__.但是,我建议您在模型中的所有查询函数接收查询作为参数(请参阅此处:http://blog.drewolson.org/composable-queries-ecto/)并且不要在模型中调用存储库.

保留调用存储库的行为,这是一个副作用,对集成层,如控制器,什么不是.


Pat*_*ity 7

您可以使用__MODULE__,它将在编译时替换为封闭模块的名称.