我正在尝试在我的仓库中查询此表:
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
答案 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/1
或String.to_atom/1
将其转换为原子。