在eex模板中渲染img:协议Phoenix.HTML.Safe未实现

时间:2017-08-06 15:08:09

标签: elixir phoenix-framework

我有一个项目显示页面,可以正确显示文字:

<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  
在story.ex我有:

|> cast_attachments(attrs, [:project_pic])

在最新的迁移文件中,它存储为字符串:

 add :project_pic, :string

也许这就是错误。

我不确定错误是在我的eex语法中,还是在文件结构的更深处。

1 个答案:

答案 0 :(得分:3)

arc_ecto在附件模块中定义了url功能,您可以调用该功能获取上传的完整网址,然后在src中将其用作<img> } 标签。第一个参数是附件值和整个模型的元组,第二个参数是图像大小(:original是原始的全尺寸图像)。以下内容应为您嵌入原始的完整尺寸图像:

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

查看documentation of arc_ecto了解更多信息。