从红宝石中的符号中减去

mta*_*tay 0 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
Run Code Online (Sandbox Code Playgroud)

在该块中,如何在找到有效图像之前继续减少id#?:/

谢谢!

sep*_*p2k 9

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

你似乎想要做的是减少的价值params[:id]做,这当然是完全有可能(从字符串到整数转换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
Run Code Online (Sandbox Code Playgroud)

后者比第一个好,因为它没有变异params(没有充分的理由去做).

然而,你不应该做这类原因,因为你可以做到这一点多少少些麻烦,通过让DB做的工作:

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

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