2010-12-01 21 views
0

Ich möchte das erste gültige Bild unter einer Liste in Ruby finden. Hier ist mein Code:subtrahieren von Symbolen in Ruby

In diesem Block, wie kann ich die ID verringern, bis ein gültiges Bild gefunden wird? :/

Danke!

Antwort

9

Sie können nicht von einem Symbol subtrahieren. Ein Symbol ist keine Nummer.

Was Sie scheinen tun zu wollen, ist der Wert von params[:id], zu verringern, was durchaus möglich, natürlich ist (nach dem die ID von String Umwandlung in Integer) von params[:id] = params[:id].to_i - 1 oder

id = params[:id].to_i 
while @image.nil? 
    @image = Image.find_by_id(id) 
    id -= 1 
end 

Letzteres tun ist besser als das erste, weil es nicht mutiert params (was gibt es keinen Grund zu tun).

aber Sie sollten auch nicht von denen tun, weil Sie dies mit viel weniger Aufwand erreichen können, indem Sie den db lassen die Arbeit machen:

Image.find(:first, :order => "id DESC", :conditions => ["id <= ?", params[:id]]) 

PS: Rubin hat keinen -- Operator , also müssen Sie -= 1 verwenden, um eine Zahl zu dekrementieren.

+1

Sollten Sie nicht find_by_id (id), nicht find_by_id (params [: id]) verwenden? Ansonsten wird @image immer gleich sein, da Sie den Wert in params nicht dekrementieren. –

+0

@Sam: Ja, natürlich. Dumm von mir. – sepp2k

+0

Keine Sorge, und +1 auf Ihre Antwort! –