Функция REGEXP
не определена по умолчанию в sqlite3, вам придется немного поработать перед этим.
Вставьте это в инициализатор (например, config/initializers/sqlite_regexp.rb
), работает с рельсами 3.1 (см. Ниже для рельсов 3.0):
require 'active_record/connection_adapters/sqlite3_adapter'
class ActiveRecord::ConnectionAdapters::SQLite3Adapter
def initialize(db, logger, config)
super
db.create_function('regexp', 2) do |func, pattern, expression|
regexp = Regexp.new(pattern.to_s, Regexp::IGNORECASE)
if expression.to_s.match(regexp)
func.result = 1
else
func.result = 0
end
end
end
end
Код украден здесь .
Конечно, вы можете переписать ваш запрос, как в ответе @ mu, но я подумал, что было бы неплохо узнать, как на самом деле реализовать функцию.
Обновление
Приведенный выше код не работает для rails 3.0, это должно работать:
require 'active_record/base'
require 'active_record/connection_adapters/sqlite_adapter'
module ActiveRecord::ConnectionAdapters
class SQLite3Adapter < SQLiteAdapter
def initialize(db, logger, config)
super
db.create_function('regexp', 2) do |func, pattern, expression|
regexp = Regexp.new(pattern.to_s, Regexp::IGNORECASE)
if expression.to_s.match(regexp)
func.result = 1
else
func.result = 0
end
end
end
end
end