web-dev-qa-db-ja.com

eexで変数が存在するかどうかを確認するにはどうすればよいですか?

私は、画像サポートを追加したモデルのクラッド部分に取り組んでいます。モデルを編集している場合は、理想的には画像を表示したいと思います。

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

問題は、新しいアクションに会社がまだあるため、company変数は編集アクションでのみ使用できることです。そのため、@ companyが設定されているかどうかを確認する必要があります。

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

問題は、これにより次のエラーが発生することです。

"割り当て@companyはeexテンプレートでは使用できません。使用可能な割り当て:[:action、:changeset]"

Is_nilで試しましたが、同じエラーです。

17
MartinElvar

[〜#〜] edit [〜#〜]以前 Phoenix 0.14.@companyはnilを返します設定されていない場合。割り当てが明示的(暗黙的ではなく明示的)になるように、raiseに変更されました。


@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] %>
42
Gazler