Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как проверить, существует ли переменная в eex?

Автор вопроса: MartinElvarОтветов: 2

Я работаю над грубой частью модели, к которой я добавил поддержку изображений. В идеале я хотел бы показать изображение, если вы редактируете модель, что я бы сделал так.

<%= Logo.url({@company.logo, @company}, :thumb) %>

Проблема в том, что переменная компании доступна только в действии редактирования, так как в новом действии еще есть компания, поэтому мне нужно проверить, установлена ​​ли @company.

<%= unless @company do %>
  <%= Logo.url({@company.logo, @company}, :thumb) %>
<% end %>

Проблема в том, что это приводит к следующей ошибке.

"назначить @company недоступно в шаблоне eex. Доступные назначения: [:action, :changeset]"

Я пробовал с is_nil, но та же ошибка.

phoenix-frameworkelixir

Ответы

Ответ 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 %>

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы