2011-11-15 5 views
2

저는 모듈리스트라고 불리는리스트를 가지고 있습니다. Model의 모든 인스턴스를 찾고 싶습니다. modellist [model.id]> 0 어떻게 쿼리를 사용하여이 작업을 수행 할 수 있습니까? 지금 내가이 쿼리 완료 같은 원하는이 기능레일즈가 foreign 함수를 쿼리합니다

finalmodels = [] 
@models.each do |model| 
    if modellist[model.id] >0 
    finalmodels.push(model) 
    end 
end 
@models = finalmodels 

을 가지고,하지만 난 그것을 알아낼 기운 다. 그래서

Model.where(... modellist[model.id]>0) 
+0

'무엇을 modellist'됩니다 중 하나를 할 때에

models = Model.find(:all).collect{|m| (modellist[i.id] < 0)? m:otherval } 

같은 일을 할 수 있을까? – tadman

+0

@tadman modellist [model.id] = 숫자 – jack

답변

0

같은 당신이 같은 수치 또는 쿼리의 일부로 제공 할 수있는 일의 측면에서 쿼리를 지정해야합니다 귀하의 쿼리의 SQL 도메인이 아닌 루비 도메인에서 완전히 작동 기억 문자열 값 또는 데이터베이스에 저장된 값에 적용 할 수있는 조건. SQL Server는 사용자가 쿼리에서 제공 한 것 이외의 응용 프로그램의 내부 상태에 대한 지식이 없거나 이전에 데이터베이스 상태로 저장되었습니다.

개발자는 응용 프로그램의 상태를 데이터베이스에서 실행할 수있는 것으로 변환하는 방법을 알아야합니다. 어쩌면 이것은 데이터베이스에 modellist을 저장하여 쿼리에 포함될 수 있거나, 이길 수없는 전쟁과 싸우는 대신 다른 솔루션을 생각해내는 문제를 다시 생각할 수 있습니다.

+0

어드바이스 덕분에 정수리스트입니다 – jack

+0

숫자 목록이면 키를 추출하고 간단한 쿼리를 할 수 있어야합니다 : Model.where (Model.where : modellist.select {| k, v | v> 0} .collect {| k, v | k})'이것은 모듈리스트 인 Hash를 가져 오기위한 키의 배열로 변환 한 다음 가져옵니다. – tadman

+0

나는 u가 말한 것을 시도했다, 그것은 정확하게 작동하지 않았다, 그래서 나는 수집 방법을 들여다 보았다. 나는이 쿼리를 만들었고, @models = Model.find (: all) .collect {| m | modellist [m.id]> 0}, 거기에 오류를 던지지는 않지만 나중에 호출해야합니다. @models = @ models.sort {| mod1, mod2 | modellist [mod2.id] <=> modellist [mod1.id]}리스트를 modellist만큼 정렬하려면,이 줄은 이전에 작동 했었지만, 이제는 오류에 대해'id '가 false 인 경우 오류가 발생합니다 : FalseClass here – jack

0

발견 솔루션, 그것은 (이 정확히 잘 아니지만 내가 생각할 수있는 가장 가까운 실제 솔루션입니다)

models = Model.find(:all).collect{|m| m }.reject{ |i| modellist[i.id] < 1 } 

수집] 부분은 (매개 변수 m으로) 모든 모델을 통과 진행을 heres 어떻게 | m 뒤에 값을 지정합니다. (이 경우 m). 그 후, 조건 (modellist [i.id] < 1)이 참인 경우, 거부는 매개 변수 i와 함께 통과하고 거부합니다. 당신은 또한 당신이 두 애송이들이다

+0

이것은 쿼리가 아니지만 코드가 적습니다. 나는 여전히 내 문제 (이 동일한 작업을 완료하는 쿼리)에 대한 답변을 좋아할 것입니다. – jack

관련 문제