Elixir “你好”;搜索、排序、分页;?在凤凰城框架内
我在展示页面中有客户联系人列表。 它是分页的 我想将搜索和排序添加到此列表中。 我一直在调查,但凤凰1.3似乎没有进展。我在mix deps时出错。获取抱怨的requuire phoenix版本 第二种选择是。但我很难理解,很难上路 我认为搜索和排序是大多数人实现的命令功能。Elixir “你好”;搜索、排序、分页;?在凤凰城框架内,elixir,phoenix-framework,Elixir,Phoenix Framework,我在展示页面中有客户联系人列表。 它是分页的 我想将搜索和排序添加到此列表中。 我一直在调查,但凤凰1.3似乎没有进展。我在mix deps时出错。获取抱怨的requuire phoenix版本 第二种选择是。但我很难理解,很难上路 我认为搜索和排序是大多数人实现的命令功能。 你是怎么做到的?我该怎么做呢?在使用任何更大、更复杂、更混乱的框架进行排序/搜索之前,您可以推出自己的解决方案 搜索 异位提供和治疗。简单的全文解决方案可能如下所示: # In your Customer Controll
你是怎么做到的?我该怎么做呢?在使用任何更大、更复杂、更混乱的框架进行排序/搜索之前,您可以推出自己的解决方案 搜索 异位提供和治疗。简单的全文解决方案可能如下所示:
# In your Customer Controller
def index(conn, params = %{"name_search" => name_search}) do
customers = Repo.all(from c in Customer,
where: like(c.name, ^"%#{name_search}%"))
# render customers
end
注意,ilike/2
仅受postgresql支持。此外,这可能导致类似注入攻击,因为您允许用户输入通配符。通过遵循以下指南,可以很容易地对输入进行消毒:
分类
也可以通过利用
此解决方案允许按一个键(需要包含在@sort\u keys
中)进行排序,也可以按升序或降序进行排序。如果需要,可以很容易地扩展到同时支持多个排序键
这两种解决方案都可以在某个时候抽象为各自的模块/上下文模块
# Extending your customer controller
# May want to transfer some of this logic to its own or context module
@sort_keys ~w(name email)
def index(conn, params = %{"name_search" => name_search,
"sort_key" => sort_key, "sort_type" => sort_type}) do
sort_type =
case sort_type do
"asc" -> :asc
_ -> :desc
end
sort_key =
Enum.find(@sort_keys, "name", &(&1 == sort_key))
|> String.to_atom
customers = Repo.all(from c in Customer,
where: like(c.name, ^"%#{name_search}%")),
order_by: [{sort_type, sort_key}]
# render customers
end