Я не могу понять, в чем ваша настоящая проблема с сокращением, но я полагаю, что перед сравнением вы должны были сократить существующие категории. Я полагаю, что регулярное выражение здесь не поможет, так как «=>» в условиях является точным сравнением с учетом регистра (по умолчанию в БД), а регулярное выражение не поддерживается AR Вы должны сделать это по-другому:
PostgreSQL:
books = Book.find :all, :conditions => [ "authors ILIKE ?", "smith" ]
Mysql:
author = "Smith".downcase
books = Book.find :all, :conditions => [ "LOWER(authors) LIKE ?", "#{author}" ]
или
books = Book.find :all, :conditions => [ "authors LIKE ? COLLATE utf8_general_ci", "smith"]
Существовать? Метод должен работать с параметром условий, как указано выше.
Если это вызывает какой-либо удар по БД, например у вас есть миллионы категорий. Затем вы должны создать отдельный столбец с именем в нижнем регистре и сравнить его с простым условием "=>".