从红宝石中的符号中减去

时间:2010-12-01 23:10:11

标签: ruby symbols subtraction

我想在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 个答案:

答案 0 :(得分:9)

您无法从符号中减去。符号不是数字。

您似乎想要做的是减少params[:id]的值,这当然是完全可能的(通过执行params[:id] = params[:id].to_i - 1

将id从字符串转换为整数之后)
id = params[:id].to_i
while @image.nil?
  @image = Image.find_by_id(id)
  id -= 1
end

后者比第一个更好,因为它不会改变params(没有充分的理由去做)。

但是你不应该做其中任何一个,因为你可以通过让db完成工作来减少很多的麻烦来实现这个目的:

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

PS:Ruby没有--运算符,因此您必须使用-= 1递减数字。