如何访问Elixir中的当前模块

时间:2015-08-29 04:24:23

标签: elixir phoenix-framework

假设我有一个模块$qb->expr()->in('u.id', ':ids'); ->setParameter('ids', $id) ,它有以下方法:

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 更改为某个检索当前模块的方法?

4 个答案:

答案 0 :(得分:17)

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

将存储库(这是副作用)的行为留给集成层,如控制器,什么不是。

答案 1 :(得分:8)

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

答案 2 :(得分:0)

您可以使用特殊格式__CALLER__来访问调用模块的名称。

答案 3 :(得分:0)

您可以为封闭模块起别名,如:

defmodule MyApp.User
  alias MyApp.User
  ...
  some_function(User)

,然后直接引用User。简化的方法是像这样对__MODULE__进行别名:

defmodule MyApp.User
  alias __MODULE__
  ...
  some_function(User)