2013-04-05 17 views
10

mój kod index.html.erb -Dlaczego zdjęcia nie są wyświetlane w moich szynach Podstawowa aplikacja

<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 %> 

i obrazy są pod app\assets\images ..ale nieruchome obrazy nie są wyświetlane na przednim końcu.

to, wydaje mi się, że tag graficzny poprawnie się tworzy ... daj mi znać, czego mi brakuje w tej części.

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

Zrzut -

screenshot

Obrazy są na miejscu, a także -

image placeholder

Daj mi znać, co robię źle i jak to naprawić .

EDIT

github.com/swapnesh/depot

Daj mi znać, dlaczego to nie działa w moim przypadku.

Chociaż zmiana /images/product1.jpgna powoduje, że działa.

+0

Czy używasz spinacza lub nośnika? – Kashiftufail

+0

jesteś w 100% pewien, że plik **/app/assets/images/product1.jpg ** istnieje? Nie jestem pewien, ale plik może nie istnieć, a następnie pomocnik używa ścieżki **/images/product1.jpg ** zamiast **/assets/product1.jpg ** – rorra

+0

Spróbuj zmienić atrybut 'src':' Product1 'to' Product1 'w firebug – codeit

Odpowiedz

20

Jeśli używasz rurociąg atutem http://guides.rubyonrails.org/asset_pipeline.html,

Ścieżka obraz powinien być /assets/product1.jpg zamiast /images/product1.jpg

Jeśli nie używasz rurociągu aktywów, przenieść obrazy folderu do public/images

+0

Nie. Domyślnie obraz będzie przeszukiwany w '/ assets/images /' – codeit

+0

@Srikanth Perfect .. działa po zmianie "/images/product1.jpg" ---> "/assets/product1.jpg" .. czy możesz wyjaśnić swoją odpowiedź, ponieważ jestem dla niej nowy (chociaż sprawdziłem adres URL, o którym wspomniałeś .. ale coś w prostych słowach zostanie docenione) +1 – swapnesh

+0

@Swapnesh: Będziesz musiał przeczytać dokumentację potoku, aby zrozumieć to zachowanie . Z pipeline Rails 3.1 został wprowadzony. Przenosi obraz, css, js do katalogu asset i czyni ścieżkę łatwiejszym w widoku pliku. W pliku View po prostu wywołujemy plik /assets/product.jpg, /assets/product.css, mimo że jest zorganizowany w /assets/images/product.jpg, /assets/stylesheets/product.css. Umożliwia to również kompresję JS, css, Obrazy przy produkcji. –

2

As Srikanth już powiedział, że należy odwołać się do ścieżki zasobów. Jako przykład możesz umieścić kod <%= image_tag 'rails.png' %> i sprawdzić firebug (lub sprawdzić element w chromie), aby sprawdzić wynik.

Nie jestem do końca pewien, dlaczego Twój kod nie działa, ponieważ widzę, że śledziłeś Agile Web Development z Railsami. Uruchomiłem aplikację bez problemu. W tabeli widzę "Produkt 1", "Produkt 2" i "Produkt 3", czy to właśnie wypełniłeś w polu tekstowym image_url? Co się stanie, jeśli zmienisz "Produkt 1" na "produkt1.jpg"?

Na marginesie, jeśli chcesz użyć spinacza, połączenie powinno wyglądać następująco:

<%= image_tag(product.image.url, class: 'list_image') %> 
9

Właśnie sprawdziłem swoją aplikację, nie ma nic złego w kodzie. Jedyną rzeczą jest zrozumienie, jak działa image_tag.

Zwykle umieszczasz wszystkie swoje obrazy, pliki javscript i styleheets w katalogu app/assets. Podczas pracy w środowisku programistycznym pliki te są udostępniane jako nieskompresowane, ale po wdrożeniu do produkcji zasoby są prekompilowane, minimalizowane, a pliki wynikowe są przechowywane w obiekcie public/assets.

Ideą minified aktywów, jest tylko, aby wnioski szybciej dla klientów, a także zaoszczędzić przepustowość.

Teraz, korzystając z metody image_tag, można użyć ścieżki zewnętrznej obrazu, lokalnej ścieżki obrazu lub względnej ścieżki obrazu.

Kiedy robisz

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

będzie korzystał z bezwzględny adres URL dla tagu obrazu i skończy z

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

Możesz dodać ścieżkę lokalną, a także, jak

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

Która zakończy się w

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

która jest faktycznie problem masz, bo szynach, gdy precompiles pliki, stawia wszystko w ciągu /public/aktywa, i można uzyskać dostęp do tych plików, wchodząc na ścieżkę /aktywa jako inni użytkownicy wyjaśnili.

Więc kod

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

faktycznie działa, bo kończą

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

Drugą rzeczą, jaką możesz zrobić, to użyć ścieżki względnej, tj

<%= image_tag "image.jpg" %> 

zostanie zamienione na

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

i że będzie działać tak samo ostatni scenariusz.

Niemniej jednak od zastosowania, masz zamiar pozwolić użytkownikom na przesyłanie własnych zdjęć, nastąpi to później, kiedy można przejść na książki, na prawdziwym światowym aplikacji, można użyć gem jak paperclip lub carrierwave

+1

Thx za pisanie i czas +1 :) – swapnesh

Powiązane problemy