Elixir “你好”;搜索、排序、分页;?在凤凰城框架内

Elixir “你好”;搜索、排序、分页;?在凤凰城框架内,elixir,phoenix-framework,Elixir,Phoenix Framework,我在展示页面中有客户联系人列表。 它是分页的 我想将搜索和排序添加到此列表中。 我一直在调查,但凤凰1.3似乎没有进展。我在mix deps时出错。获取抱怨的requuire phoenix版本 第二种选择是。但我很难理解,很难上路 我认为搜索和排序是大多数人实现的命令功能。 你是怎么做到的?我该怎么做呢?在使用任何更大、更复杂、更混乱的框架进行排序/搜索之前,您可以推出自己的解决方案 搜索 异位提供和治疗。简单的全文解决方案可能如下所示: # In your Customer Controll

我在展示页面中有客户联系人列表。 它是分页的

我想将搜索和排序添加到此列表中。 我一直在调查,但凤凰1.3似乎没有进展。我在mix deps时出错。获取抱怨的requuire phoenix版本

第二种选择是。但我很难理解,很难上路

我认为搜索和排序是大多数人实现的命令功能。
你是怎么做到的?我该怎么做呢?

在使用任何更大、更复杂、更混乱的框架进行排序/搜索之前,您可以推出自己的解决方案

搜索 异位提供和治疗。简单的全文解决方案可能如下所示:

# 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