How to use scrivener

I’m trying to use scrivener but I’m having some issues understanding the correct way to use it. I also tried rummage and had the same issue.

My current code

 alias Magnify.Magnets
 alias Magnify.Magnets.Magnet

  def index(conn, _params) do
   magnets = Magnets.list_magnets()
    render(conn, "index.html", magnets: magnets)
  end

And when I try to add scrivener

def index(conn, _params) do
    magnets = Magnify.Magnets
           |> Magnify.Repo.paginate(_params)
    render conn, "index.html", magnets: magnets
  end

Getting the following error

function MagnifyWeb.MagnetController.init/1 is undefined (module MagnifyWeb.MagnetController is not available)

Is there MagnifyWeb.MagnetController anywhere in your code?

Yes that is were I made the changes

defmodule MagnifyWeb.MagnetController do
  use MagnifyWeb, :controller


  alias Magnify.Magnets
  alias Magnify.Magnets.Magnet

  def index(conn, _params) do
    magnets = Magnify.Magnets
           # Other query conditions can be done here
           |> Magnify.Repo.paginate(_params)
    render conn, "index.html", magnets: magnets

    #magnets = Magnets.list_magnets()
    #render(conn, "index.html", magnets: magnets)
  end

  def new(conn, _params) do
    changeset = Magnets.change_magnet(%Magnet{})
    render(conn, "new.html", changeset: changeset)
  end

  def create(conn, %{"magnet" => magnet_params}) do
    case Magnets.create_magnet(magnet_params) do
      {:ok, magnet} ->
        conn
        |> put_flash(:info, "Magnet created successfully.")
        |> redirect(to: magnet_path(conn, :show, magnet))
      {:error, %Ecto.Changeset{} = changeset} ->
        render(conn, "new.html", changeset: changeset)
    end
  end

  def show(conn, %{"id" => id}) do
    magnet = Magnets.get_magnet!(id)
    render(conn, "show.html", magnet: magnet)
  end

  def edit(conn, %{"id" => id}) do
    magnet = Magnets.get_magnet!(id)
    changeset = Magnets.change_magnet(magnet)
    render(conn, "edit.html", magnet: magnet, changeset: changeset)
  end

  def update(conn, %{"id" => id, "magnet" => magnet_params}) do
    magnet = Magnets.get_magnet!(id)

    case Magnets.update_magnet(magnet, magnet_params) do
      {:ok, magnet} ->
        conn
        |> put_flash(:info, "Magnet updated successfully.")
        |> redirect(to: magnet_path(conn, :show, magnet))
      {:error, %Ecto.Changeset{} = changeset} ->
        render(conn, "edit.html", magnet: magnet, changeset: changeset)
    end
  end

  def delete(conn, %{"id" => id}) do
    magnet = Magnets.get_magnet!(id)
    {:ok, _magnet} = Magnets.delete_magnet(magnet)

    conn
    |> put_flash(:info, "Magnet deleted successfully.")
    |> redirect(to: magnet_path(conn, :index))
  end
end

I am not sure but maybe because of you are ignoring params. Please change _params to paramsand try again.

Yea I updated everything to the correct way but I’m getting “Repo.paginate/2 is undefined” which I think is an issue with the lib

my new code

def index(conn, params) do
   page = Magnets
           |> Repo.paginate(params)
    render(conn, "index.html", magnets: page.entries, page: page)
  end

I think you didnt add alias Magnify.Repo to your module. Or just use Magnify.Repo.paginate

I have the following

alias Magnify.Magnets
alias Magnify.Magnets.Magnet

I tried adding the alias you suggested and I got the following error

protocol Ecto.Queryable not implemented for Magnify.Magnets, the given module does not provide a schema. This protocol is implemented for: Atom, BitString, Ecto.Query, Ecto.SubQuery, Tuple

and when I did Magnify.Repo.paginate I get the same error

Thanks I got it working

This is the correct way

 def index(conn, params) do
    #magnets = Magnets.list_magnets()
    #render(conn, "index.html", magnets: magnets)

    page = Magnet
          |> Repo.paginate(params)

    #magnets = Magnets.list_magnets(params)
    #render(conn, "index.html", magnets: magnets)
    render(conn, "index.html", magnets: page.entries, page: page)