Вопрос

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

 if(params[:id])

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

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

Спасибо!

Это было полезно?

Решение

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

Кажется, что вы хотите сделать, так это уменьшить ценность 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: Руби не имеет -- оператор, поэтому вам нужно использовать -= 1 уменьшить число.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top