2017-08-06 84 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更多。