Skip to content
A rich ecto component, including search sort and paginate.
Elixir CSS HTML JavaScript Shell
Branch: master
Clone or download
Pull request Compare This branch is 9 commits behind zven21:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

Turbo Ecto

Build Status Coverage Status

Turbo is a very rich ecto component,including search sort and paginate. Inspiration by ruby ransack and learn from rummage_ecto

Phoenix support turbo_html, check this repos.

Table of contents

Getting started

  • The package can be installed by adding turbo_ecto to your list of dependencies in mix.exs:
def deps do
    {:turbo_ecto, "~> 0.4.0"}
  • Add the Repo of your app and the desired per_page to the turbo_ecto configuration in config.exs:
config :turbo_ecto, Turbo.Ecto,
  repo: MyApp.Repo,
  per_page: 10

You can also define other configurations with entry_name and pagenate_name in config.exs.


  • Category Table Structure

    Field Type Comment
    name string
  • Product Table Structure

    Field Type Comment
    name string
    body text
    price float
    category_id integer
    available boolean
  iex> params = %{"q" => %{"name_and_category_name_like" => "elixir"}, "s" => "inserted_at+asc", "per_page" => 20}

  iex> Turbo.Ecto.turbo(Turbo.Ecto.Product, params)
    datas: [%Turbo.Ecto.Product{}],
    paginate: %{
      current_page: 10,
      next_page: 11,
      per_page: 20,
      prev_page: 9,
      total_count: 100,
      total_pages: 20

  iex> params2 = %{"filter" => %{"name_like" => "elixir"}, "sort" => "inserted_at+asc"}}
  iex> Turbo.Ecto.turbo(Turbo.Ecto.Product, params2, [entry_name: "entries"])
    entries: [%Turbo.Ecto.Product{}],
    paginate: %{}

More example pls move: docs

Search Matchers

List of all possible search_types

Predicate Description Finish Note
*_eq equal Y (SQL: col = 'value')
*_not_eq not equal Y (SQL: col != 'value')
*_lt less than Y (SQL: col < 1024)
*_lteq less than or equal Y (SQL: col <= 1024)
*_gt greater than Y (SQL: col > 1024)
*_gteq greater than or equal Y greater than or equal. (SQL: col >= 1024)
*_present not null and not empty Y Only compatible with string columns. Example: q[name_present]=1 (SQL: col is not null AND col != '')
*_null is null true or false Y (SQL: col is null or col is not null)
*_in match any values in array Y e.g. q[name_in][]=Alice&q[name_in][]=Bob (SQL: name in ('Alice', 'Bob'))
*_like Contains value Y (SQL: col LIKE '%value%')
*_ilike Contains any of Y (SQL: col ILIKE '%value%')
*_true is true or false Y (SQL: col is true or col is false)
*_between begin < between < end Y e.g. q[price_between][]=100&q[price_between][]=200 (SQL: 100 <= price <= 200)


The dummy app shows a simple turbo_ecto example.

Clone the repository.

Change directory

$ cd dummy

Run mix

$ mix deps.get && yarn --cwd=assets

Preparing database

$ mix ecto.setup

Start the Phoenix server

$ ./script/server

Open your browser, and visit http://localhost:4000


Bug report or pull request are welcome.

Make a pull request

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

Please write unit test with your code if necessary.


The gem is available as open source under the terms of the MIT License.


You can’t perform that action at this time.