I do not understand how to edit render/2 function after upgrade to Phoenix 1.7

Hi, I upgraded to Phoenix 1.7, but I don’t understand how to adjust the render/2 function in html.heex.

For example, I have these parts of the code.

    <div class="font-weight-bold text-muted">
      <%= if @current_user.role != :basic do %>
        <%= render("filters.html", assigns) %>
      <% end %>
    </div>
    <header class="mb-3 fixed-top" id="loader">
      <%= render("navbar.html", conn: @conn, current_user: @current_user) %>
    </header>

I will currently receive Compilation Error in this format. (undefined function render/2). How do I correctly change the render function?

I found something about it in the documentation(Point 3) and here on Github too.

However, I still do not fully understand how to edit HTML. Should I add something to Controller or HTML.EX file that is now used instead of View?

For example,when I try somthing like <%= filters(assigns) %>, of course, the function will be undefined.

Thanks for any help. Have a nice day. :slight_smile:

Hi,

If filters.html(.heex) is also embedded (embed_templates) by the same module, it should work.

Let’s say the view was called “foo”, the big lines for migrating:

Create lib/my_app_web/controllers/foo_html.ex as:

defmodule MyAppWeb.FooHTML do
    use MyAppWeb, :html

    embed_templates "foo_html/*"
end

Then:

git add lib/my_app_web/controllers/foo_html.ex
git mv lib/my_app_web/templates/foo lib/my_app_web/controllers/foo_html
git rm lib/my_app_web/views/foo_view.ex

And replace lines like <%= render("**name**.html", assigns) %> by <.**name** {assigns}/> or <%= **name**(assigns) %>

1 Like