我想在 ruby 列表中找到第一个有效图像。这是我的代码:
if(params[:id])
@image = Image.find_by_id(params[:id])
while @image.nil?
:id-- ?
@image = Image.find_by_id(params[:id])
end
在那个块中,我怎样才能不断减少 id # 直到找到有效图像?:/
谢谢!
我想在 ruby 列表中找到第一个有效图像。这是我的代码:
if(params[:id])
@image = Image.find_by_id(params[:id])
while @image.nil?
:id-- ?
@image = Image.find_by_id(params[:id])
end
在那个块中,我怎样才能不断减少 id # 直到找到有效图像?:/
谢谢!
您不能从符号中减去。符号不是数字。
您似乎想要做的是减小 的值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
来减少一个数字。