webentwicklung-frage-antwort-db.com.de

Warum werden Bilder in meiner Basis-App nicht angezeigt?

mein index.html.erb code -

<h1>Listing products</h1>

<table border="1">

<% @products.each do |product| %>
  <tr>
    <td><%= product.title %></td>
    <td><%= product.description %></td>
    <td><%= image_tag(product.image_url, :class => 'list_image') %></td>
    <td><%= product.price %></td>
    <td><%= link_to 'Show', product %></td>
    <td><%= link_to 'Edit', edit_product_path(product) %></td>
    <td><%= link_to 'Destroy', product, method: :delete, data: { confirm: 'Are you sure?' } %></td>
  </tr>
<% end %>
</table>

<br />

<%= link_to 'New Product', new_product_path %>

und Bilder sind unter app\assets\images .., aber Standbilder werden nicht im Frontend angezeigt.

Wenn ich Firebug es glaube, glaube ich, dass sich das Bild-Tag richtig formt ... Lassen Sie mich wissen, was mir in diesem Teil fehlt.

<img src="/images/product1.jpg" class="list_image" alt="Product1">

Screenshot -

screenshot

Bilder sind auch vorhanden -

image placeholder

Lassen Sie mich wissen, was ich falsch mache und wie ich es beheben kann.

EDIT

github.com/swapnesh/depot

Lassen Sie mich wissen, warum es in meinem Fall nicht funktioniert.

Obwohl /images/product1.jpg To /assets/product1.jpg geändert wird, funktioniert es.

13
swapnesh

Wenn Sie die Asset-Pipeline http://guides.rubyonrails.org/asset_pipeline.html verwenden, 

Der Bildpfad sollte /assets/product1.jpg anstelle von /images/product1.jpg sein.

Wenn Sie keine Asset-Pipeline verwenden, verschieben Sie den Bilderordner nach public/images.

22
Srikanth Jeeva

Ich habe gerade Ihre Bewerbung geprüft, Ihr Code stimmt nicht. Die einzige Sache ist zu verstehen, wie image_tag funktioniert.

Normalerweise legen Sie alle Ihre Bilder, JavaScripts und Stylesheests im Verzeichnis app/assets ab. Wenn Sie in der Entwicklungsumgebung arbeiten, wurden diese Dateien nicht komprimiert geliefert, aber bei der Bereitstellung in der Produktion werden die Assets vorkompiliert, minimiert und die Ergebnisdateien in public/assets gespeichert.

Die Idee hinter minimierten Assets ist nur, die Anforderungen für die Clients zu beschleunigen und Bandbreite zu sparen.

Auf der Methode image_tag können Sie nun einen externen Pfad für das Image, einen lokalen Pfad für das Image oder einen relativen Pfad für das Image verwenden.

Wenn Sie das tun

<%= image_tag "http://www.mywebsite.com/image.jpg" %>

es wird die absolute URL für das Image-Tag verwendet, und Sie beenden mit

<img src="http://www.mywebsite.com/image.jpg" />

Sie können auch einen lokalen Pfad hinzufügen, z

<%= image_tag "/images/image.jpg" %>

Welches endet in 

<img src="/images/image.jpg" />

das ist eigentlich das Problem, das Sie haben, weil Rails, wenn es die Dateien vorkompiliert, alles in / public/assets ablegt und Sie auf diese Dateien zugreifen können, indem Sie den Pfad / assets als andere Benutzer erklärt.

Also der Code

<%= image_tag "/assets/image.jpg" %>

funktioniert eigentlich, weil du mit endest

<img src="/assets/image.jpg" />

Die andere Möglichkeit ist, einen relativen Pfad zu verwenden, d. H.

<%= image_tag "image.jpg" %>

das wird in umgewandelt

<img src="/assets/image.jpg" />

und das wird im letzten Szenario genauso funktionieren.

Trotzdem lassen Sie in Ihrer Anwendung die Benutzer ihre eigenen Bilder hochladen. Dies geschieht später, wenn Sie im Buch vorankommen. In einer realen App verwenden Sie einen Edelstein wie Paperclip oder Trägerwelle

10
rorra

Wie Srikanth bereits sagte, sollte auf den Vermögenspfad verwiesen werden. Als Beispiel könnten Sie <%= image_tag 'Rails.png' %> in Ihren Code einfügen und den Firebug (oder das Element in Chrome) überprüfen, um das Ergebnis zu überprüfen.

Ich bin mir nicht ganz sicher, warum Ihr Code nicht funktioniert, da ich sehen kann, dass Sie Agile Web Development with Rails folgen. Ich habe die Depot-Anwendung ohne Probleme laufen lassen. In Ihrer Tabelle sehen Sie "Product1", "Product2" und "Product3". Ist dies das, was Sie tatsächlich in das image_url-Textfeld eingegeben haben? Was passiert, wenn Sie "Product1" in "Product1.jpg" ändern?

Wenn Sie Paperclip verwenden möchten, sollte Ihr Anruf folgendermaßen aussehen:

<%= image_tag(product.image.url, class: 'list_image') %>
1
Peter de Ridder

Wenn Sie eine Datei mit der Erweiterung .jpeg erhalten, versuchen Sie, die Datei mit ".jpg" umzubenennen. 

Von 

<%= image_tag "image.jpeg" %>

Zu:

<%= image_tag "image.jpg" %>
0
surgentt