Нахождение символов à, à и т. Д. С хорьком в рельсах - PullRequest
2 голосов
/ 02 декабря 2010

У меня есть проект рельсов, над которым работает хорек.Также у меня есть несколько таблиц с французскими и испанскими именами.Это содержит символы, такие как: а, а.ü и т. д. Когда я выполняю поиск, я использую только общие символы, и из-за этого невозможно найти в базе данных что-то вроде «bèrché», используя ключевое слово «berche».Я пытался заменить вокал подстановочным символом вроде "?"или "*", но это не похоже на работу.

Вот код:

# controller
default_options = {:limit => :all}
@results_ferret = Model.find_with_ferret(params["search_words"], default_options)

# model
class Model < ActiveRecord::Base
  require 'acts_as_ferret'
  acts_as_ferret({:fields => [:region, :origin, :something, :name, :content], :remote => true})
end

Есть идеи, как поступить?

1 Ответ

0 голосов
/ 16 августа 2012

Ферре нужно знать о локали при построении индекса. Это достигается путем просмотра переменной среды «LANG». У нас есть грабли, называемые ferret: rebuild, поэтому для нас это выглядит так:

RAILS_ENV=development LANG=da_DK.UTF-8 INDEXES='Model' rake ferret:rebuild

Если это не работает, проверьте параметры сортировки базы данных.

Для справки

Наша задача по рейку выглядит следующим образом:

namespace :ferret do

  # Rebuild index task. Declare the indexes to be rebuilt with the INDEXES
  # environment variable:
  #
  # INDEXES="my_model shared" rake ferret:rebuild
  desc "Rebuild a Ferret index. Specify what model to rebuild with the INDEXES environment variable."
  task :rebuild => :environment do

    models = ENV['INDEXES'].split.map(&:constantize)

    start = 1.minute.ago
    models.each { |m| m.rebuild_index }

    # update records that have changed since the rebuild started
    models.each do |m|
      m.records_modified_since(start).each do |object|
        object.ferret_update
      end
    end
  end
end
...