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
When I run the Plug and I recompile I wind up having to use Ctrl C to quit iex and start again. Witht the help of rlwrap I can use the cu...
New
For some reason my phoenix channels are working for me in my local dev environment, but as soon as I deploy via Docker, I get a 403 error...
New
I have a another noob question about loop. Since elixir is immutable, while loop is not directly possible.
total = 10
while total != 0
...
New
About me? ( if you have nothing better to do than reading about some random guy in the internet :stuck_out_tongue: )
Hello all, this is ...
New
Hello everybody,
usually, I use a 29" ultra-wide monitor for VSCode which can easily accomodate explorer (files panel) + file with code ...
New
I have a relationship of love and hate with Elixir. Lots of things are just absolutely right, but there are some things that are kind of ...
New
Using vs code and installed ElixirLS: support and debugger.
And I got an error popped up on start up says
Failed to run ‘elixir’ comma...
New
Other popular topics
Hi,
I am new to Elixir. I am trying to use the DateTime component to insert a date into MySQL however the there seems to be no way to fo...
New
Hello, can anybody help here..? I have a list of players and I what to delete an element, but every for loop the list is reverting to ori...
New
TL;DR: I’ve just released an implementation of Microsoft’s IDE-independent Language Server Protocol for Elixir. It adds language support ...
New
Credo is smart enough to check for (something like) this:
assert length(the_list) == 0
with this response:
Checking if an enum is empt...
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
I’ve got an issue with an app and I’ve no idea of how to troubleshoot it. I’m hoping someone here might have seen something similar.
I p...
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









