我正在尝试基于查询字符串中的参数构建查询。我刚刚开始学习Elixir/OTP和函数式编程,所以我正在尝试找到做这件事的函数式方法。目前,我正在减少传递到操作中的映射,并使用找到的参数构建查询。有没有更实用或更灵丹妙药的方法呢?
query = Enum.reduce params, Event, fn(param, query) ->
case param do
{"after", date} ->
date = DateTimeParser.parse!(date, "{ISO:Extended:Z}")
from e in query,
where: e.time > ^date
{"before", date} ->
date = DateTimeParser.parse!(date, "{ISO:Extended:Z}")
from e in query,
where: e.time < ^date
{"eventType", type} ->
from e in query,
where: e.event_type_id == ^type
_ -> query
end
end 发布于 2015-12-27 06:23:34
我真正看到的唯一改进是使用函数而不是案例,这在你添加更多案例之前不会有多大影响。
query = Enum.reduce params, Event, build_query/2
def build_query({"after", date}, query) do
date = DateTimeParser.parse!(date, "{ISO:Extended:Z}")
from e in query,
where: e.time > ^date
end
# etc ...
def build_query(_, query), do: query如果我的语法有任何错误,请原谅,我现在不在家。希望你能领会到改变的精神。
https://stackoverflow.com/questions/34474778
复制相似问题