0

我想在 ruby​​ 列表中找到第一个有效图像。这是我的代码:

 if(params[:id])

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

在那个块中,我怎样才能不断减少 id # 直到找到有效图像?:/

谢谢!

4

1 回答 1

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

后者比第一个更好,因为它不会发生变异params(没有充分的理由这样做)。

但是,您不应该执行其中任何一项,因为您可以通过让数据库完成工作来轻松实现这一目标:

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

PS:Ruby没有--运算符,所以你必须使用-= 1来减少一个数字。

于 2010-12-01T23:13:30.897 回答