2

globalize3 gem (https://github.com/svenfuchs/globalize3) を使用するサイトがあり、現在、サイト検索を行うために Tire gem を追加しています。

実際のロケールに応じてテーブルの翻訳にインデックスを付けるにはどうすればよいですか? 現在、インデックスが作成されるモデルは、デフォルトのロケールでのみ実行されます。

4

1 に答える 1

0

すべての翻訳にインデックスを付ける必要があります。

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

上記のコードはテストしていません。アイデアを提供するためのものです。プロジェクトで使用する前に、理解して動作することを確認してください。そうしないと、悪いことが起こります。

于 2012-05-13T11:23:55.680 に答える