완전한 Phoenix
지원을 원하는 경우 Rummage.Phoenix
Rummage.Ecto
사용하고 여기에 HTML
및 Controller
지원을 추가합니다. 여기를 클릭하면 Rummage.Phoenix
확인할 수 있습니다.
버전별 변경사항은 CHANGELOG를 참조하세요.
Rummage.Ecto
는 검색, 정렬 및 페이지 매김 작업을 통해 Ecto
쿼리를 변경하는 데 사용할 수 있는 가볍지만 강력한 프레임워크입니다.
Rummage.Ecto.Hook
동작을 구현하는 모듈인 Hooks
사용하여 위 작업을 수행합니다. 각 작업: Search
, Sort
및 Paginate
Rummage
에 정의된 후크가 있습니다. 이렇게 하면 Rummage
완전히 구성할 수 있습니다.
예를 들어 Rummage
의 후크 중 하나가 마음에 들지 않지만 나머지 두 개는 마음에 드는 경우 Rummage
사용하지 않도록 구성하고 사용자 정의 후크를 작성할 수 있습니다.
참고: Rummage
Ransack
같지 않으며 Ransack
과 같을 의도도 없습니다. 검색 매개변수를 기반으로 함수를 정의하지 않습니다. 이와 같은 기능을 원할 경우 언제든지 해당 모델에 대한 Search
모듈을 사용하도록 Rummage
구성할 수 있습니다. 이것이 Rummage가 구성 가능하게 된 이유입니다.
rummage
사용법의 예를 보려면 이 저장소를 확인하세요.
이 패키지는 Hex로 제공되며 다음과 같이 설치할 수 있습니다.
mix.exs
의 종속성 목록에 rummage_ecto
추가하세요.
def deps do
[ { :rummage_ecto , "~> 2.0.0-rc.0" } ]
end
Rummage.Ecto.Hook
를 사용하는 모듈이며 Rummage.Ecto.Hook
동작에 대한 콜백을 구현합니다. 쿼리를 변환할 수 있는 각 엑토 작업은 Hook
에 의해 정의됩니다. 후크에는 Ecto.Queryable
변수를 변환할 수 있는 run/2
함수가 있고 rummage_ecto
통해 전달된 매개변수를 변환할 수 있는 format_params/3
함수가 있습니다. 참고: 이는 선택 사항입니다. 구성이 제공되지 않으면 Rummage
기본 후크와 AppName.Repo
저장소로 사용합니다.
Rummage
기본 후크를 재정의하려면 dev.exs
의 구성 목록에 rummage_ecto
구성을 추가하세요.
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
설정하려면 고급 사용 섹션에 표시된 대로 Rummage.Ecto
사용하는 동안 model.exs
파일에 추가하세요.
Rummage.Ecto
에는 많은 코드를 작성하지 않고도 즉시 사용할 수 있는 강력한 기능이 많이 포함되어 있습니다.
다음은 Rummage.Ecto
사용할 수 있는 방법입니다:
Repo
와 원하는 per_page
(Rummage의 Pagination을 사용하는 경우)를 config.exs
의 rummage_ecto
구성에 추가하세요. config :rummage_ecto , Rummage.Ecto ,
repo: MyApp.Repo ,
per_page: 10
Ecto
모델에서 Rummage.Ecto
사용할 수 있어야 합니다.Rummage
의 기본 후크를 사용자 정의 후크로 재정의하려면 원하는 작업이 포함된 앱의 CustomHook
config.exs
의 rummage_ecto
구성에 추가하세요. config :rummage_ecto , Rummage.Ecto ,
repo: MyApp.Repo ,
search: MyApp.SearchModule ,
paginate: MyApp.PaginateModule
Repo
가 있는 앱에서 Rummage.Ecto
사용하거나 모델별로 Repo
구성해야 하는 경우 Rummage.Ecto
호출과 함께 전달할 수 있습니다. 이는 구성에 설정된 기본 저장소를 재정의합니다. { queryable , rummage } = Product
|> Rummage.Ecto . rummage ( rummage , repo: MyApp.Repo2 )
Repo
에 있는 Product
모델과 함께 Rummage.Ecto
사용할 수 있어야 합니다. 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
search
, sort
및/또는 paginate
키를 사용하여 params
에 응답합니다. 해당 문제에 대해 모든 키나 키가 있을 필요는 없습니다. 유효하지 않은 키가 전달되면 조사 작업이 변경되지 않습니다. 다음은 Rummage
매개변수의 예입니다. rummage = % {
search: % { field_1 => % { search_type: :like , search_term: "field_!" } } ,
sort: % { field: :field1 , order: :asc } ,
paginate: % { per_page: 5 , page: 1 }
}