2011-03-16 2 views
0

Ruby on Rails 2.3.8을 사용하고 있습니다. 여러 개의 사용자 모델 객체가 메모리에 저장되어 있고 여러 개의 Where 조건을 점검하고 싶습니다. 이 모든 데이터는 메모리에 저장되기 때문에 이러한 검사를 수행하기 위해 데이터베이스에 피해야합니다. 데이터베이스를 방문하지 않고 이러한 모델을 검사 할 수있는 방법이 있습니까? 즉 메모리 내 모델 객체에 대한 SQL Where 조건의 유효성을 검사하는 몇 가지 방법이 있습니까?루비 온 레일즈 (Ruby on Rails) : ActiveRecord를 테스트하는 방법 데이터베이스를 치지 않고 조건을 충족시키는 곳?

whereCondition = "name LIKE 'James Smith'" 
User.find(:first, :conditions => [whereCondition]) 

I 메모리에서 사용할 수있는 여러 사용자 및 여러 whereConditions을 가지고, 내가 '무엇을 : 나는 실제로 내가 같은 것을 할 것입니다 데이터베이스에서 레코드를 끌어한다면

은 일을 더 명확하게하려면 d 정말로하고 싶은 것은 다음과 같습니다.

someUser.meetsCondition?(whereCondition) 

부울을 반환합니다. 내 자신의 SQL 파서를 작성하지 않고이 작업을 수행 할 수있는 방법이 있습니까?

감사합니다.

답변

0

직접 구문 분석하지 않고는이를 수행 할 방법이 없습니다.

그러나 원하는 경우 sqlite 메모리 내장 데이터베이스를 만들고 레코드를로드 한 다음 쿼리를 사용할 수 있습니다. 나는 이것이 실제로 얼마나 실용적인지 모르겠다 - 그것은 정상적인 웹 요청으로 수행하기에는 너무 많은 작업이며, 이것을 수행하는 비용은 어쨌든 실제 데이터베이스에 대한 쿼리를 다시 실행하는 것보다 훨씬 비쌀 수있다. 실험을해야합니다.

1

사용자가 이미 메모리에있는 경우 다음과 같은 작업을 수행하면 개체가 다시로드되지 않아야합니다.

user.name =~ /James Smith/ 
+0

일부 조건은 평등을 검사하는 것보다 좀 더 특이한 것이므로 대안은 실제로 SQL 구문 분석기를 작성하는 것이므로 오히려하지 않을 것입니다. – Vega

0

레일은 레일 가이드 사이트에 대한 읽을 수있는 캐시 설정이 있습니다. 그 중 일부는 당신이 성취하고자하는 것에 적합 할 수 있습니다.

cached_model 보석과 함께 Memcached을 확인할 수도 있습니다. 일반적으로 이것을 사용하고 after_save 모델 콜백에서 개체의 캐시 된 복사본을 업데이트합니다.

0

아니요, 메모리 내 컬렉션에 대해 SQL 논리를 실행하는 기본 제공 메커니즘이 없습니다. 원하는 SQL 파서를 작성해야합니다.

관련 문제