Cette question est tellement fondamentale que je n'arrive pas à trouver les détails en ligne.Afficher le dernier enregistrement dans la base de données en utilisant Phoenix/Ecto
J'ai un modèle appelé 'radios' et je souhaite afficher la dernière la radio a ajouté à ma page d'accueil - templates/page/index.html.eex
Ce que j'ai jusqu'à présent:
radio.ex
defmodule Radios.Radio do
use Radios.Web, :model
import Ecto.Query
schema "radios" do
field :name, :string
field :desc, :string
field :price, :integer
field :text1, :string
field :text2, :string
field :text3, :string
field :text4, :string
field :mainimg, :string
timestamps()
end
@doc """
Builds a changeset based on the `struct` and `params`.
"""
def changeset(struct, params \\ %{}) do
struct
|> cast(params, [:name, :desc, :price, :text1, :text2, :text3, :text4, :mainimg])
|> validate_required([:name, :desc, :price, :text1, :text2, :mainimg])
end
def sorted(query) do
from r in query,
order_by: [desc: r.inserted_at]
end
end
page_controller.ex
defmodule Radios.PageController do
use Radios.Web, :controller
alias Radios.Radio
def index(conn, _params) do
last_radio = Radio
|> Radio.sorted
|> Radios.Repo.one
render(conn, "index.html", radio: radio)
end
end
Page Template
<p class="title is-4"><%= @last_radio.name %></p>
Je suppose que je devrais écrire la requête dans le contrôleur de la page et non le contrôleur radio?
Tout cela se traduit par l'erreur de la console suivante:
== Compilation error on file web/controllers/page_controller.ex ==
** (CompileError) web/controllers/page_controller.ex:11: undefined function radio/0
Ceci est probablement soooo de base, et imaginez que je manque quelque chose de très simple, mais quoi !?
Vous avez raison. Cela a fonctionné! Et si je crée d'autres requêtes, puis-je continuer à les ajouter dans ce tableau de rendu? –
Oui. 'render (conn," index.html ", last_radio: last_radio, toto: toto, bar: barre)'. Vous pouvez attribuer autant de valeurs que vous le souhaitez. –
Super, merci @justinwood. –