Я работаю над грубой частью модели, к которой я добавил поддержку изображений. В идеале я хотел бы показать изображение, если вы редактируете модель, что я бы сделал так.
<%= Logo.url({@company.logo, @company}, :thumb) %>
Проблема в том, что переменная компании доступна только в действии редактирования, так как в новом действии еще есть компания, поэтому мне нужно проверить, установлена ли @company.
<%= unless @company do %>
<%= Logo.url({@company.logo, @company}, :thumb) %>
<% end %>
Проблема в том, что это приводит к следующей ошибке.
"назначить @company недоступно в шаблоне eex. Доступные назначения: [:action, :changeset]"
Я пробовал с is_nil, но та же ошибка.
Ответ 1 · рейтинг 55 · Gazler
EDIT До Phoenix 0.14.0 @company возвращал nil, если он не был установлен. Он был изменен на повышение, чтобы присваивание было явным (явное вместо неявного).
Если вы используете @company или assigns.company, возникнет ошибка. Однако, если вы используете assigns[:company], он вернет nil, если значение не установлено.
<%= if assigns[:company] do %>
<%= Logo.url({@company.logo, @company}, :thumb) %>
<% end %>
Стоит отметить, что если вы используете вложенный шаблон, вам также нужно будет передать это:
<h1>New thing</h1>
<%= render "form.html", changeset: @changeset,
action: thing_path(@conn, :create),
company: assigns[:company] %>
Ответ 2 · рейтинг 1 · kiru
Выбранный ответ не работает.
Попробуйте с этим:
<%= if Map.has_key?(assigns, :company) do %>
<%= Logo.url({@company.logo, @company}, :thumb) %>
<% end %>