I'm working on the crud part of a model, to which i've added image support to. Ideally i would like to show the image if you are editing a model, which i would do like this.
<%= Logo.url({@company.logo, @company}, :thumb) %>
The problem is that the company variable is only available in the edit action, as there are yet a company on the new action, so i need to check if the @company is set.
<%= unless @company do %>
<%= Logo.url({@company.logo, @company}, :thumb) %>
<% end %>
The problem is that this yields the following error.
"assign @company not available in eex template. Available assigns: [:action, :changeset]"
I tried with is_nil, but same error.
EDIT Prior to Phoenix 0.14.0 @company
would return nil if it was not set. It was changed to raise so that the assignment would be explicit (explicit over implicit.)
If you use either @company
or assigns.company
then an error will be raised. However if you use assigns[:company]
then it will return nil if the value is not set.
<%= if assigns[:company] do %>
<%= Logo.url({@company.logo, @company}, :thumb) %>
<% end %>
It is worth noting that if you are using a nested template then you will need to pass this through too:
<h1>New thing</h1>
<%= render "form.html", changeset: @changeset,
action: thing_path(@conn, :create),
company: assigns[:company] %>