2015-09-05 65 views
9

我正在研究模型的粗糙部分,我已經爲其添加了圖像支持。理想情況下,如果您正在編輯模型,我希望顯示圖像,我會這樣做。如何檢查eex中是否存在變量?

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

的問題是,該公司的變量只有在編輯動作可用,還有尚未對新動作的公司,所以我需要檢查@company設置。

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

問題是,這會產生以下錯誤。

「分配@company在EEX模板不可可用受讓人:[:動作:變更]」

我試圖與is_nil,但同樣的錯誤。

回答

25

編輯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] %> 
+5

理想,雖然是通過該公司的變量,即使它會無。它會避免一堆間接。 –

+0

@JoséValim這是一個很好的觀點 - 我要爲答案添加註釋。 – Gazler

相關問題