Mar*_*var 17 elixir phoenix-framework
我正在研究一个模型的crud部分,我已经添加了图像支持.理想情况下,如果您正在编辑模型,我想显示图像,我会这样做.
<%= Logo.url({@company.logo, @company}, :thumb) %>
Run Code Online (Sandbox Code Playgroud)
问题是公司变量仅在编辑操作中可用,因为新操作上还有公司,所以我需要检查@company是否已设置.
<%= unless @company do %>
<%= Logo.url({@company.logo, @company}, :thumb) %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
问题是,这会产生以下错误.
"分配@company在eex模板中不可用.可用分配:[:action,:changeset]"
我尝试使用is_nil,但同样的错误.
Gaz*_*ler 37
编辑在Phoenix 0.14.0 之前,@company如果未设置则返回nil.它被改为提高,以便赋值是明确的(显式过于隐含.)
如果您使用@company或assigns.company然后会引发错误.但是,如果您使用,assigns[:company]那么如果未设置该值,则返回nil.
<%= if assigns[:company] do %>
<%= Logo.url({@company.logo, @company}, :thumb) %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
值得注意的是,如果您使用的是嵌套模板,那么您还需要通过它:
<h1>New thing</h1>
<%= render "form.html", changeset: @changeset,
action: thing_path(@conn, :create),
company: assigns[:company] %>
Run Code Online (Sandbox Code Playgroud)