2017-08-06 2 views
1

J'ai une page d'affichage du projet qui affiche correctement le texte:img Rendu dans un modèle EEX: protocole Phoenix.HTML.Safe pas mis en œuvre

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

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

Je veux afficher une image téléchargée utilisateur.

J'ai essayé:

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

qui retourne:

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

Cela me montre la photo a téléchargé et stocké dans la base de données.

J'ajouté inspectent:

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

selon cette réponse:

protocol Phoenix.HTML.Safe not implemented Elixir Phoenix

qui passe le compilateur, mais affiche uniquement une icône d'image brisée.

Comment l'image est-elle enregistrée?

je cela dans post.ex:

field :project_pic, Citybuilder.ProjectPic.Type 

dans stories.ex J'ai:

|> cast_attachments(attrs, [:project_pic]) 

dans le dernier fichier de migration, il est stocké sous forme de chaîne:

add :project_pic, :string 

Peut-être que c'est l'erreur.

Je ne suis pas sûr si l'erreur est dans ma syntaxe eex, ou quelque part plus profond dans la structure du fichier.

+0

Comment calculez-vous et stockez 'project_pic'? Vous voulez probablement '<% ​​= @ post.project_pic.file_name%>' si l'image est dans le même chemin racine. – Dogbert

+0

J'ai mis à jour ma question pour inclure plus d'informations. Voir "Comment l'image est-elle stockée?" Si vous voulez savoir autre chose, s'il vous plaît demander. – RubyRube

+0

'cast_attachments' signifie que vous utilisez' arc' et 'arc_ecto'? – Dogbert

Répondre

3

arc_ecto définit une fonction url dans votre module de fixation, que vous pouvez appeler pour obtenir l'URL complète du téléchargement qui peut ensuite être utilisé comme src dans une balise <img>. Le premier argument est un tuple de la valeur de la pièce jointe et le modèle entier, et le second est la taille de l'image (:original est l'image originale en taille réelle). Ce qui suit devrait intégrer l'image complète d'origine pour vous:

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

Vérifiez la documentation of arc_ecto plus.