[CSS] Tekst pod obrazkiem

Uploaded with ImageShack.us

Kto ma jakis pomysl zeby zrobic taki widok jak na obrazku. Chodzi mi o akcje pod kazdym obrazkiem

Widok

[code=ruby]<% title “Albums” %>

<% for album in @albums %> <% if album.photos.count > 0 %> <%= link_to (image_tag album.photos.find(:first).image.url(:thumbnail)), album_photos_path(album) %> <%else%> <%= link_to (image_tag "/assets/products/54/thumbnail/micha.jpg"), album_photos_path(album) %> <%end%> <%= link_to "Show", album_photos_path(album) %> <%= link_to "Edit", edit_album_path(album) %> <%= link_to "Destroy", album, :confirm => 'Are you sure?', :method => :delete %> <% end %>

<%= link_to "New Album", new_album_path %>

[/code] ps: if album.photos.count > 0 uzywam do sprawdzania czy jakis obrazek jest juz w albumie. Bardzo nie podoba mi sie takie rozwiazanie bo generuje duze zapytanie do bazy. Czym moge to zastapic (moze jakis helper)? Probowalem <% if album.photos?%> ale zwraca undefined method `photos?.

Modele:

Album has_many :photos
Photo belongs_to :album

Moja propozycja refactoringu:

w album.rb:

[code=ruby]class Album < …
DefaultCoverPath = “/assets/products/54/thumbnail/micha.jpg”

def cover_path
empty? ? DefaultCoverPath : photos.first.image.url(:thumbnail)
end

def empty?
photos.empty?
end
end[/code]

[code=ruby]<% title “Albums” %>

<% for album in @albums %>
<%= link_to (image_tag album.cover_path), [album, :photos] %> <%= link_to "Show", [album, :photos] %> <%= link_to "Edit", [:edit, album, :photos] %> <%= link_to "Destroy", album, :confirm => 'Are you sure?', :method => :delete %>
<% end %>

<%= link_to "New Album", new_album_path %>

[/code] Poza tym, moja propozycja jest taka, byś nie wrzucał domyślnego obrazka przez upload na swojej stronie, a trzymał go w repozytorium razem z aplikacją w pliku np. public/images/default_album_cover.png

Mając każdy album w osobnym div, bawiąc się floatem, clearfix mógłbyś uzyskac efekt, którego pożądasz

Edit:

Sprawdzanie, czy empty jest IMHO wystarczajace, dopóki nie masz kiku tysięcy albumów nie przejmowałbym się tym zapytaniem. Poza tym - ile na stronie bys wyswietlal albumów? Przy większej ilości zapewne będziesz chcał wprowadzić paginację - a wtedy kilka/dziesiąt zapytań do bazy nie jest wielkim problemem.

Jeżeli już naprawdę będziesz chciał to zoptymalizować, możesz użyć counter_cache.

[code=ruby].images

  • images.each do |i|
    • div_for i do
      = image_tag i.photo.url(:small)
      %small
      = link_to ‘Edytuj’, edit_image_path(i)
      …[/code]
      w css:
      .image
      :width XXX
      :height XXX
      :float left
      :margin 5px
      img
      :padding 3px
      : border 1px solid black

Szerokośc daj taka jak miniaturki, na napisy mozesz dac align: center, zeby bylo dokładnie tak samo.

na końcu jakiś
clear na wszystko i tyle

Możesz opisać dokładnie o co chodzi bo to dość proste o co pytasz więc może masz jakiś inny problem tylko źle sfoormuowałeś