2017-08-06 80 views
1

我有一個項目顯示頁正確顯示文本:在EEX模板渲染IMG:協議Phoenix.HTML.Safe沒有實現

<p><%= @post.body %></p> 

<%= @post.title %></h1> 

我想顯示用戶上傳的照片。

我想:

<img src="<%= @post.project_pic %>"/> 

返回:

protocol Phoenix.HTML.Safe not implemented for %{file_name: "pexels-photo-144322 (1).jpeg", updated_at: #Ecto.DateTime<2017-08-06 14:05:26>} 

這說明我的石化公司上傳並存儲在數據庫中。

我補充檢查:

<img src="<%= inspect @post.project_pic %>"/> 

按照這樣的回答:

protocol Phoenix.HTML.Safe not implemented Elixir Phoenix

其中通過編譯器,但只顯示一個破碎圖像圖標。

圖片如何存儲?

我有這樣的post.ex:

field :project_pic, Citybuilder.ProjectPic.Type 

在stories.ex我:

|> cast_attachments(attrs, [:project_pic]) 
在最新的遷移文件

它存儲爲一個字符串:

add :project_pic, :string 

也許這就是錯誤。

我不確定錯誤是在我的eex語法中,還是在文件結構中更深的地方。

+0

你如何計算和存儲'project_pic'?如果圖像位於同一根路徑中,您可能需要'<%= @ post.project_pic.file_name%>>。 – Dogbert

+0

我更新了我的問題以包含更多信息。請參閱「如何存儲圖片?」如果你想知道其他什麼,請問。 – RubyRube

+0

'cast_attachments'意味着你正在使用'arc'和'arc_ecto'? – Dogbert

回答

3

arc_ecto您的附件模塊,你可以打電話獲取,然後可以在<img>標籤被用作src上傳的完整URL中定義了一個url功能。第一個參數是附件值和整個模型的元組,第二個參數是圖像大小(:original是原始全尺寸圖像)。下面應該嵌入原始全尺寸圖像您:

<img src="<%= Citybuilder.ProjectPic.url({@post.project_pic, @post}, :original) %>"/> 

退房的documentation of arc_ecto更多。