Vous ne pouvez pas soustraire d'un symbole. Un symbole n'est pas un nombre.
Ce que vous semblez vouloir faire est de diminuer la valeur de params[:id]
, ce qui est bien sûr tout à fait possible (après conversion de l'identifiant de chaîne en entier) en faisant params[:id] = params[:id].to_i - 1
ou
id = params[:id].to_i
while @image.nil?
@image = Image.find_by_id(id)
id -= 1
end
Ce dernier est mieux que le premier parce qu'il ne mute pas params
(qu'il n'y a pas de bonne raison de faire).
Cependant, vous ne devriez pas faire non plus de ceux-ci, parce que vous pouvez y parvenir avec beaucoup moins de tracas, en laissant le db faire le travail:
Image.find(:first, :order => "id DESC", :conditions => ["id <= ?", params[:id]])
PS: Ruby n'a pas un opérateur --
, donc vous devez utiliser -= 1
pour décrémenter un nombre.
Vous ne devriez pas utiliser find_by_id (id), pas find_by_id (params [: id])? Autrement, @image sera toujours la même, car vous ne décrémenterez pas la valeur dans les paramètres. –
@Sam: Oui, bien sûr. Stupide de moi. – sepp2k
Pas de soucis, et +1 à votre réponse! –