如何在eex中检查变量是否存在?

时间:2015-09-05 10:33:22

标签: elixir phoenix-framework

我正在研究一个模型的crud部分,我已经为其添加了图像支持。理想情况下,如果您正在编辑模型,我想显示图像,我会这样做。

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

问题是公司变量仅在编辑操作中可用,因为新操作上还有公司,所以我需要检查@company是否已设置。

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

问题是这会产生以下错误。

“指定@company在eex模板中不可用。可用分配:[:action,:changeset]”

我尝试使用is_nil,但同样的错误。

2 个答案:

答案 0 :(得分:36)

编辑 Phoenix 0.14.0之前@company如果未设置则返回nil。它被改为提高,以便赋值是明确的(显式过隐式。)

如果您使用@companyassigns.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] %>

答案 1 :(得分:1)

所选答案无效。

尝试一下:

<%= if Map.has_key?(assigns, :company) do %>
  <%= Logo.url({@company.logo, @company}, :thumb) %>
<% end %>