2010-12-01 4 views
0

루비의 목록 중에서 첫 번째 유효한 이미지를 찾고 싶습니다. 여기 내 코드는 다음과 같습니다.루비에서 심볼을 뺍니다.

if(params[:id]) 

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

그 블록에서 유효한 이미지가 발견 될 때까지 어떻게 계속 ID를 줄일 수 있습니까? :/

감사합니다.

답변

9

기호에서 뺄 수 없습니다. 기호는 숫자가 아닙니다. 당신이 원하는 것 무엇

후자가 더 params[:id] = params[:id].to_i - 1 또는

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

을 수행하여 (정수로 문자열에서 ID를 변환 한 후) 물론 완벽하게 가능하다 params[:id]의 가치를 감소하는 것입니다 왜냐하면 그것은 params을 돌연변이하지 않기 때문입니다 (좋은 이유가 없습니다). 당신은 DB를 시켜서, 훨씬 덜 번거 로움과이를 달성 할 수 있기 때문에 당신이 그 중 하나를하지 말아야하지만

이 작업을 수행

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

PS : 루비는 -- 운영자가 없습니다 따라서 -= 1을 사용하여 숫자를 감소시켜야합니다.

+1

find_by_id (params [: id])가 아닌 find_by_id (id)를 사용해야합니까? 그렇지 않으면 @image는 params 내부의 값을 감소시키지 않으므로 항상 동일합니다. –

+0

@Sam : 예, 물론입니다. 멍청한 나. – sepp2k

+0

걱정하지 마시고 +1 해주십시오! –

관련 문제