Elixir中的动态代码

时间:2018-08-09 15:48:41

标签: elixir ecto

我正在尝试在我的仓库中查询此表:

 user_id | create_author | delete_author | update_author | read_author
----------------------------------------------------------------------
   1     |   true        |    false      |    false      |   true

在我的代码中,我以字符串的形式获取列的名称(例如variable = "create_author")。如何在查询中插入variable

当我对create_author进行硬编码时,它可以工作:

def auth() do
    App.Permission
    |> where(user_id: ^Map.get(current_user, :id))
    |> where(read_author: true)
    |> Repo.one()
    |> case do
      nil -> false
      _user -> true
    end
end

我希望能够输入variable = "read_author"variable = :read_author

1 个答案:

答案 0 :(得分:2)

您可以为此使用field表达式:

def auth() do
  variable = :read_author
  App.Permission
  |> where(user_id: ^Map.get(current_user, :id))
  |> where([p], field(p, ^variable) == true) # <- this
  |> Repo.one()
  |> case do
    nil -> false
    _user -> true
  end
end

如果您有字符串,则可以使用String.to_existing_atom/1String.to_atom/1将其转换为原子。