Getting json view error

I have a user schema. From which I have to fetch showing certain fields. So I have two controllers and both are fetching the data from same model.

So here is my profiles_view j

defmodule AppWeb.ProfilesView do
  use AppWeb, :view
  alias AppWeb.ProfilesView


   def render(action, params) do
    IO.inspect action
    IO.inspect params
   end

  def render("profiles.json", %{profiles: profiles}) do
    %{data: render_many(profiles, ProfilesView, "profile.json")}
  end

  def render("profile.json", result) do
  end
end

But here Iā€™m getting data in my profiles. So I did inspect action and params. So in action Iā€™m getting ā€œprofiles.jsonā€ and
in params assigns

%{
      layout: false,
      profiles: %App.Auth.User{
        __meta__: #Ecto.Schema.Metadata<:loaded, "itlabs", "user">,
        avatar: nil,
        background: nil,
        created_date: ~N[2020-04-20 18:58:24],
        email: "sidd3009@gmail.com",
      }

But when I call after first render function Iā€™m getting this kind of error

** (exit) an exception was raised:
** (Protocol.UndefinedError) protocol Enumerable not implemented

This error related to the data Iā€™m receiving. But I want to know why the layout is false?
Please check assigns

Can you show the call to render/3 in your controller? Are you sure you are not passing layout: false as an assign?

EDIT: I am mistaken. The reason why you see layout: false is explained here. The :layout key is a reserved assign set by Phoenix for layout rendering.

1 Like

Iā€™m just doing this

  def get_profiles(conn, _params) do
    profile = Guardian.Plug.current_resource(conn)
    profiles = Auth.get_user!(profile.id)

    render(conn, "profiles.json", profiles: profiles)
  end

Yes, sorry, I edited my answer above. As you are rendering JSON, the layout is set to false by default.

You are still using plural when it should be singular.

The catch clause should be at the end if You want to catch match error.

Well, profiles is not a list, but a User.

1 Like

Yes I know. The reason Iā€™ve put there because Iā€™m getting error when I put in the end. So I wanted to know what data Iā€™m getting in my assigns.

Plural thing yes I know. I wanted to check if somehow the map Iā€™m getting can be define in another view. Sorry if Iā€™m not making sense

You should also show the controller, and tell which action You are renderingā€¦

Here is controller

Well, profiles is just a single User, as told, but You try toā€¦

And this wonā€™t work.

Yes. I already resolved that. Mainly I was confused about that Layout: false part