2016-10-13 9 views
0

내 프로젝트에서 다른 시간 조각이 있습니다. 이 시간 조각에는 "00-04", "04-08", "08-12", "12-16", "16-20"및 "20-24"등과 같은 이름이 있습니다. 앞서 언급 한 이름으로 모든 시간 조각 개체를 얻고 싶었습니다. 그래서 다음과 같이 프로그래밍했습니다 :SQLite3 :: SQLException : 해당 함수 없음 : REGEXP rails rspec

time_slice_names = ["00-04", "04-08", "08-12", "12-16", "16-20", "20-24"] 
time_slices = TimeSlice.where('name REGEXP ?', time_slice_names.join("|")) 

time_slices는 내 개발 모드에서 올바른 개체를 제공합니다. 내가 테스트를 실행할 때 그러나, 나는이 오류가 :

ActiveRecord::StatementInvalid: 
SQLite3::SQLException: no such function: REGEXP: SELECT "time_slices".* FROM "time_slices" WHERE (name REGEXP '00-04|04-08|08-12|12-16|16-20|20-24') 

내 database.yml을은 다음과 같이

development: 
    adapter: mysql2 
    database: development 
    encoding: utf8 
    pool: 5 
    timeout: 5000 

    test: 
    adapter: sqlite3 
    database: db/test.sqlite3 
    pool: 5 
    timeout: 5000 

내 테스트 환경 내 개발 환경을 사용하는 반면 sqlite3를를 사용하는 알고 mysql2. 어쨌든 mysql2와 sqlite3 모두 위에서 언급 한 쿼리를 수행 할 수 있습니까?

+1

가능한 더 많은 정보를 제공합니다. 그러나 [이] (http://stackoverflow.com/questions/5071601/how-do-i-use-regex-in-a-sqlite-query) 체크 아웃 (허용 된 답변 무시). – ndn

+1

@sadiksha 나도 SQLite 부분에 대한 많은 지식을 가지고 있지 않습니다. 따라서 SQLite가 아닌 MySQL과 함께 작동하는 경우 SQLite가 해당 regexp 함수를 구현하지 않았다고 오류가 명확하게 표시됩니다. 따라서 ndn이 제안한대로 모든 env에 동일한 Db를 사용하는 것이 좋습니다. – Autodidact

+0

감사합니다. @ndn.이 경우 배열 처리에 대한 쿼리를 사용했습니다. 나는 너의 제안을 확실히 고려할 것이다. –

답변

1

다른 답변에 따르면 How to turn on REGEXP in SQLite3 and Rails 3.1?에 따르면 regexp()은 기본적으로 Sqlite3에 정의되어 있지 않습니다. 이 기능을 Sqlite3에 추가하는 네이티브 확장을 설치해야합니다.

그러나 정규식을 사용하지 않고도 쿼리를 수행 할 수 있습니다.

time_slice_names = ["00-04", "04-08", "08-12", "12-16", "16-20", "20-24"] 
time_slices = TimeSlice.where(name: time_slice_names) 

내부 데이터베이스 어댑터 (MySQL의 또는 sqlite3를)이를 이해하고 where field in (x, y, z) 쿼리를 지원하는로 변환해야한다.

내가 더 나은 개발/테스트/자극에 대해 동일한 DB 어댑터를 사용 찾을 ActiveRecord where field = ? array of possible values