我正在研究一个模型的crud部分,我已经为其添加了图像支持。理想情况下,如果您正在编辑模型,我想显示图像,我会这样做。
<%= Logo.url({@company.logo, @company}, :thumb) %>
问题是公司变量仅在编辑操作中可用,因为新操作上还有公司,所以我需要检查@company是否已设置。
<%= unless @company do %>
<%= Logo.url({@company.logo, @company}, :thumb) %>
<% end %>
问题是这会产生以下错误。
“指定@company在eex模板中不可用。可用分配:[:action,:changeset]”
我尝试使用is_nil,但同样的错误。
答案 0 :(得分:36)
编辑 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] %>
答案 1 :(得分:1)
所选答案无效。
尝试一下:
<%= if Map.has_key?(assigns, :company) do %>
<%= Logo.url({@company.logo, @company}, :thumb) %>
<% end %>