globalize3 gem (https://github.com/svenfuchs/globalize3) を使用するサイトがあり、現在、サイト検索を行うために Tire gem を追加しています。
実際のロケールに応じてテーブルの翻訳にインデックスを付けるにはどうすればよいですか? 現在、インデックスが作成されるモデルは、デフォルトのロケールでのみ実行されます。
globalize3 gem (https://github.com/svenfuchs/globalize3) を使用するサイトがあり、現在、サイト検索を行うために Tire gem を追加しています。
実際のロケールに応じてテーブルの翻訳にインデックスを付けるにはどうすればよいですか? 現在、インデックスが作成されるモデルは、デフォルトのロケールでのみ実行されます。
すべての翻訳にインデックスを付ける必要があります。
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
上記のコードはテストしていません。アイデアを提供するためのものです。プロジェクトで使用する前に、理解して動作することを確認してください。そうしないと、悪いことが起こります。