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.