2012-02-08 6 views
0

저는 RoR을 처음 사용합니다; 나는 다음 문장을 만들어야한다. 나는 배열을 가졌다. 변수 value.This 코드거짓 진술

def check_warehouse(asset,serial) 
    wh = Warehouse.where(["(asset = ? and serial = ?) OR (asset = ?) OR (serial= ?)",asset,serial,asset,serial]) 
    return false if wh.count > 1 
    return false if 
    wh.each do |wh| 
    wh.position_id != session[:position_id] 
    end 
end 

가에 나는 모든 배열 요소가 동일하지 않은 경우 해당 컨트롤러의 수익이 거짓 원하지만 그것을하지 않습니다 작품! 그 이유는 무엇입니까?

또한, RoR 데이터에서 pdf를 생성하기 위해 Rails 3.1에서 실행되는 플러그인 또는 보석을 제안 해 주실 수 있습니까? 모든

+2

그것은 "그 말을 도움이되지이다 작동하지 않습니다 ". 작동하지 않는 것에 대해 설명하십시오 - 오류 메시지를 제공하고, 예상되는 것을 설명하십시오. –

+2

오류에 대해 더 잘 설명 할 수 있습니까? 또한 pdf 내보내기의 경우 'whhtmltopdf' – ksol

+0

@marco를 확인하십시오.이 방법이 도움이 될 경우 대답을 수락하십시오. –

답변

2

해보십시오 떨어지게 같은 주셔서 감사합니다 : 당신이 1 개 이상의 요소가있는 경우 반환하면 배열을 확인하는 것은 의미가 없기 때문에

def check_warehouse(asset,serial) 
    wh = Warehouse.where(["(asset = ?) OR (serial= ?)",asset,serial]) # first condition was just extra 
    return false if wh.detect {|wh| wh.position_id != session[:position_id] } 
end 

내가 return false if wh.count > 1를 제거했습니다. 내가 당신을 오해하면 알려주세요

UPD 당신은 DB에 그렇게 할 수 실제로

:

return false if wh.each do |wh| 
    wh.position_id != session[:position_id]      
end 

이 방법을 실행하지 않습니다

def check_warehouse(asset,serial) 
    Warehouse.where(
    ["(asset = ? OR serial= ?) AND NOT position_id = ?", asset, serial, session[:position_id]] 
).count.zero? 
end 
3

당신이 코드를 가지고 네가 원해. 루비에서는 .each는 "블록"(do/end 사이의 코드)을 실행하고 원래의 배열을 반환합니다.

그래서 만약 WH가 비어 있거나하지 배열, 그리고 당신 말 :

return false if [] 

루비가 false를 반환하지 않습니다. 대신, 당신은 가능성이 차라리 :

return false if wh.any? {|wh| wh.position_id != session[:position_id] } 

위치가 세션 위치 인 경우로 전환 할 수 있도록 당신은 아마, 그것이 사실 반환 할 것입니다 :

return wh.any?{|wh| wh.position_id == session[:position_id] }