Если вам нужна полная поддержка Phoenix
, Rummage.Phoenix
использует Rummage.Ecto
и добавляет к нему поддержку HTML
и Controller
. Вы можете проверить Rummage.Phoenix
, нажав здесь.
Пожалуйста, обратитесь к CHANGELOG для изменений конкретной версии.
Rummage.Ecto
— это легкая, но мощная платформа, которую можно использовать для изменения запросов Ecto
с помощью операций поиска, сортировки и разбиения на страницы.
Он выполняет вышеуказанные операции с помощью Hooks
— модулей, реализующих поведение Rummage.Ecto.Hook
. Каждая операция: Search
, Sort
и Paginate
имеет свои перехватчики, определенные в Rummage
. Благодаря этому Rummage
становится полностью настраиваемым.
Например, если вам не нравится один из хуков Rummage
, но нравятся два других, вы можете настроить Rummage
так, чтобы он не использовал его, и написать свой собственный крючок.
ПРИМЕЧАНИЕ. Rummage
не похож на Ransack
и не собирается быть похожим на Ransack
. Он не определяет функции на основе параметров поиска. Если вы хотите иметь что-то подобное, вы всегда можете настроить Rummage
на использование модуля Search
для этой модели. Вот почему Rummage стал настраиваемым.
Чтобы увидеть пример использования rummage
, посетите этот репозиторий.
Этот пакет доступен в Hex и может быть установлен как:
Добавьте rummage_ecto
в список зависимостей в mix.exs
:
def deps do
[ { :rummage_ecto , "~> 2.0.0-rc.0" } ]
end
Rummage.Ecto.Hook
) и реализуют обратные вызовы для поведения Rummage.Ecto.Hook
. Каждая экто-операция, которая может преобразовать запрос, определяется Hook
. Хуки имеют функцию run/2
с помощью которой они могут преобразовать переменную Ecto.Queryable
, и функцию format_params/3
с помощью которой они могут преобразовывать параметры, переданные им через rummage_ecto
ПРИМЕЧАНИЕ. Это необязательно. Если конфигурация не указана, Rummage
будет использовать хуки по умолчанию и AppName.Repo
в качестве репозитория.
Если вы хотите переопределить какие-либо перехватчики Rummage
по умолчанию, добавьте конфигурацию rummage_ecto
в список конфигураций в dev.exs
:
config :rummage_ecto ,
Rummage.Ecto ,
search: MyApp.SearchModule
Для настройки репо:
config :rummage_ecto ,
Rummage.Ecto ,
repo: MyApp.Repo # This can be overridden per model basis, if need be.
Другие параметры конфигурации: repo
, sort
, paginate
, per_page
Rummage.Ecto
можно настроить глобально с помощью значения per_page
(которое можно переопределить для модели). Если вы хотите установить разные per_page
для разных моделей, добавьте их в файл model.exs
при использовании Rummage.Ecto
как показано в разделе «Расширенное использование».
Rummage.Ecto
включает в себя множество мощных функций, которые доступны сразу же, без написания большого количества кода.
Ниже приведены способы использования Rummage.Ecto
:
Repo
вашего приложения и желаемую per_page
(если используется нумерация страниц Rummage) в конфигурацию rummage_ecto
в config.exs
: config :rummage_ecto , Rummage.Ecto ,
repo: MyApp.Repo ,
per_page: 10
Rummage.Ecto
с любой моделью Ecto
.Rummage
с помощью своего пользовательского перехватчика, добавьте CustomHook
вашего приложения с желаемой операцией в конфигурацию rummage_ecto
в config.exs
: config :rummage_ecto , Rummage.Ecto ,
repo: MyApp.Repo ,
search: MyApp.SearchModule ,
paginate: MyApp.PaginateModule
Rummage.Ecto
с приложением, имеющим несколько Repo
, или когда необходимо настроить Repo
для каждой модели, его можно передать вместе с вызовом Rummage.Ecto
. Это переопределяет репозиторий по умолчанию, установленный в конфигурации: { queryable , rummage } = Product
|> Rummage.Ecto . rummage ( rummage , repo: MyApp.Repo2 )
Rummage.Ecto
с моделью Product
, которая находится в другом Repo
, чем модель по умолчанию. rummage = % {
search: % { field_1 => % { search_type: :like , search_term: "field_!" } } ,
sort: % { field: :field1 , order: :asc } ,
paginate: % { per_page: 5 , page: 1 }
}
{ queryable , rummage } = Product
|> Rummage.Ecto . rummage ( rummage )
products = queryable
|> Product . another_operation # <-- Since `Rummage` is Ecto, we can pipe the result queryable into another queryable operation.
|> Repo . all
params
ключами: search
, sort
и/или paginate
. Ему не обязательно иметь все ключи или какие-либо ключи, если уж на то пошло. Если переданы неверные ключи, они не изменят никаких операций при поиске. Вот пример параметров Rummage
: rummage = % {
search: % { field_1 => % { search_type: :like , search_term: "field_!" } } ,
sort: % { field: :field1 , order: :asc } ,
paginate: % { per_page: 5 , page: 1 }
}