hector97rch
Error rendering view, implementing the many function
Hi I’m new to elixir and I have a problem when i render one view using many, all of this happens when I call get_users the error its this:
# Could not render "usuario.json" for UsuariosWeb.UserView, please define a matching clause for render/2 or define a template at "lib/usuarios_web/templates/user/*". No templates were compiled for this module. Assigns:
my view its this:
defmodule UsuariosWeb.UserView do
use UsuariosWeb, :view
def render("usuarios.json", %{usuarios: usuarios}) do
%{usuarios: render_many(usuarios, UsuariosWeb.UserView, "usuario.json")}
end
def render("usuario.json", %{usuario: usuario}) do
%{
id: usuario.id,
name: usuario.name,
email: usuario.email,
estado: usuario.estado
}
end
end
and my contoller its this:
def show_usuarios(conn, _params) do
usuarios = Usuarios.User.buscar_usuarios()
case usuarios != [] do
true ->
conn
|>put_status(200)
|> put_resp_content_type("application/json")
|>render("usuarios.json", %{usuarios: usuarios})
false ->
{:error, "no hay usuarios"}
end
end
def show_usuario(conn, %{"id" => id}) do
case Usuarios.User.buscar_usuario(id) do
nil->
{:error, "usuario no encontrado!"}
usuario->
conn
|> put_status(200)
|> render("usuario.json", %{usuario: usuario})
end
end
Most Liked
stefanchrobot
Try this:
%{usuarios: render_many(usuarios, UsuariosWeb.UserView, "usuario.json", as: :usuario)}
The underlying user is passed to the view and template as
:user, which is inferred from the view name.
which means that
%{usuarios: render_many(usuarios, UsuariosWeb.UserView, "usuario.json")}
is equivalent to:
Enum.map(usuarios, fn user ->
render(UserView, "usuario.json", user: user)
end)
because your view is named UserView.
As a side not, I think you can just use if in your controllers:
if usuario = Usuarios.User.buscar_usuario(id) do
# conn ...
else
{:error, "usuario no encontrado!"}
end
2
Last Post!
stefanchrobot
Here’s a full working example. Can you please check against your code? You can run this with elixir server.ex:
Application.put_env(:phoenix, :json_library, Jason)
Application.put_env(:sample, UsuariosWeb.Endpoint, [
http: [ip: {127, 0, 0, 1}, port: 5001],
server: true,
secret_key_base: String.duplicate("a", 64),
render_errors: [view: UsuariosWeb.ErrorView, accepts: ~w(html json), layout: false],
])
Mix.install([
{:plug_cowboy, "~> 2.5"},
{:jason, "~> 1.0"},
{:phoenix, "~> 1.6"},
{:phoenix_html, "~> 3.1"},
])
defmodule UsuariosWeb.UserView do
use Phoenix.View, root: ""
import Phoenix.View
def render("usuarios.json", %{usuarios: usuarios}) do
%{usuarios: render_many(usuarios, UsuariosWeb.UserView, "usuario.json", as: :usuario)}
end
def render("usuario.json", %{usuario: _usuario}) do
%{
ok: true
}
end
end
defmodule UsuariosWeb.UserController do
use Phoenix.Controller
def show_usuarios(conn, _params) do
usuarios = [1, 2, 3]
case usuarios != [] do
true ->
conn
|> put_status(200)
|> put_resp_content_type("application/json")
|> render("usuarios.json", %{usuarios: usuarios})
false ->
{:error, "no hay usuarios"}
end
end
end
defmodule UsuariosWeb.ErrorView do
use Phoenix.View, root: ""
# By default, Phoenix returns the status message from
# the template name. For example, "404.html" becomes
# "Not Found".
def template_not_found(template, _assigns) do
Phoenix.Controller.status_message_from_template(template)
end
end
defmodule Router do
use Phoenix.Router
pipeline :browser do
plug :accepts, ["html"]
end
scope "/", UsuariosWeb do
pipe_through :browser
get "/usuarios", UserController, :show_usuarios
# Prevent a horrible error because ErrorView is missing
get "/favicon.ico", UserController, :show_usuarios
end
end
defmodule UsuariosWeb.Endpoint do
use Phoenix.Endpoint, otp_app: :sample
plug Router
end
{:ok, _} = Supervisor.start_link([UsuariosWeb.Endpoint], strategy: :one_for_one)
Process.sleep(:infinity)
0
Popular in Questions
Hi,
I need to transform a list of numbers into a map where the keys are the indexes and the values are the original values of the list. ...
New
I have seen a lot of code which picks the first element from a list using Enum.at(0) instead of List.first. Is there a reason why people ...
New
What is the proper way to load a module from a file in to IEX?
In the python world, doing something like this pretty standard:
from ....
New
Hello everyone,
I try to use an Javascript Event Handler in my root.html.leex file.
Therefore I created a function in the app.js file: ...
New
Currently suffering from paralysis by [HTTP client] analysis. This is rather unusual in Elixirland as there tends to be consensus on the ...
New
I am trying to run a deploy with docker and I successfully runned with this command:
docker build -t romenigld/blog-prod .
but when I t...
New
We have an ECS cluster with 4 services, where each task joins a single cluster, via discovery ECS discovery service.
Currently when I de...
New
Other popular topics
Hi!
In PHP: $_SERVER[‘SERVER_ADDR’] - in Elixir?
Searched the docs for ip address and the web, no good results.
Thanks!
New
Hello, how can I check the Phoenix version ?
Thanks !
New
Lets say I have map like this fetching from my database
%{"_id" => #BSON.ObjectId<58eb1a7a9ad169198c3dXXXX>, "email" => ...
New
I want to highlight html closing tags when i click a html tag. That works in .html files but doesnt work for html.eex templates. How can...
New
Hello everyone,
Long time lurker first time poster here. I’ve recently begun working on Elixir full-time again! :raised_hands: It’s been...
New
Posting this to see if we can make things easier for people to get into Neovim. If you use Neovim and have a favourite distro please let ...
New
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #elixirconf-us
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #metaprogramming
- #security
- #hex









