Ruby on rails 3.1 使用轮胎和轮胎进行i18n搜索3

Ruby on rails 3.1 使用轮胎和轮胎进行i18n搜索3,ruby-on-rails-3.1,internationalization,tire,i18n-gem,globalize3,Ruby On Rails 3.1,Internationalization,Tire,I18n Gem,Globalize3,我有一个使用globalize3gem的网站(https://github.com/svenfuchs/globalize3)我现在正在添加轮胎宝石来进行网站搜索 如何根据实际的语言环境为表翻译编制索引?现在,索引的模型只使用默认语言环境。您必须为所有翻译编制索引: class Centre < ActiveRecord::Base include Tire::Model::Search include Tire::Model::Callbacks mapping do

我有一个使用globalize3gem的网站(https://github.com/svenfuchs/globalize3)我现在正在添加轮胎宝石来进行网站搜索


如何根据实际的语言环境为表翻译编制索引?现在,索引的模型只使用默认语言环境。

您必须为所有翻译编制索引:

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
班级中心lambda{| post | I18n.locale=:en;post.title}
索引:title|es,:as=>lambda{| post | I18n.locale=:es;post.title}
索引:title|jp,:as=>lambda{| post | I18n.locale=:jp;post.title}
终止
终止
如果您为许多属性支持许多语言,这可能会变得很麻烦,您可能不得不求助于元编程:

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
班级中心class_eval您必须为所有翻译编制索引:

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
班级中心lambda{| post | I18n.locale=:en;post.title}
索引:title|es,:as=>lambda{| post | I18n.locale=:es;post.title}
索引:title|jp,:as=>lambda{| post | I18n.locale=:jp;post.title}
终止
终止
如果您为许多属性支持许多语言,这可能会变得很麻烦,您可能不得不求助于元编程:

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
班级中心CalthyValues,感谢这一方法,我在考虑修改GEM来考虑表对搜索的翻译,但看起来也不错。谢谢请注意,
I18n.locale
设置是全局设置,因此请求可能会以不同的语言环境结束。考虑重置每个LAMBDA结尾处的区域。得到它,谢谢这个方法,我正在考虑修改GEM来考虑表对搜索的翻译,但这看起来也不错。谢谢请注意,
I18n.locale
设置是全局设置,因此请求可能会以不同的语言环境结束。考虑重置每个lambda结尾处的区域设置。