Вы должны проиндексировать все переводы:
class Centre < ActiveRecord::Base
include Tire::Model::Search
include Tire::Model::Callbacks
mapping do
indexes :title_en, :as => lambda { |post| I18n.locale = :en; post.title }
indexes :title_es, :as => lambda { |post| I18n.locale = :es; post.title }
indexes :title_jp, :as => lambda { |post| I18n.locale = :jp; post.title }
end
end
Это может стать громоздким, если вы поддерживаете много языков для множества атрибутов, вам, возможно, придется прибегнуть к метапрограммированию:
class Centre < ActiveRecord::Base
include Tire::Model::Search
include Tire::Model::Callbacks
mapping do
%w[en it jp].each do |locale|
%w[title text].each do |attribute|
class_eval<<-RUBY
indexes :#{attribute}_#{locale}, :as => lambda { |post| I18n.locale = :#{locale}; post.#{attribute} }
RUBY
end
end
end
end
Я не тестировал приведенный выше код, это просто для того, чтобы дать представление, поэтому убедитесь, что вы понимаете его, и он работает, прежде чем использовать его в своем проекте, в противном случае ПЛОХИЕ ВЕЩИ БУДУТ ПРОИЗОЙТИ.