вычесть из символов в рубине - PullRequest
0 голосов
/ 02 декабря 2010

Я хотел бы найти первое действительное изображение среди списка в ruby. Вот мой код:

 if(params[:id])

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

В этом блоке, как я могу продолжать уменьшать id #, пока не будет найдено правильное изображение? : /

Спасибо!

1 Ответ

9 голосов
/ 02 декабря 2010

Вы не можете вычесть из символа.Символ не является числом.

То, что вы, похоже, хотите сделать, это уменьшить значение params[:id], что, конечно, вполне возможно (после преобразования идентификатора из строки в целое число), выполнив params[:id] = params[:id].to_i - 1 или

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

Последний лучше, чем первый, потому что он не мутирует params (что нет веских оснований для этого).

Однако вы НЕ должны делать ни одно изте, потому что вы можете добиться этого с намного меньшими хлопотами, позволяя БД делать работу:

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

PS: в Ruby нет оператора --, поэтому вынеобходимо использовать -= 1 для уменьшения числа.

...