1

我正在使用以下方法对我的应用程序上的模型进行国际化:

class GenreLocalization < ActiveRecord::Base
  attr_accessible :genre_id, :name, :locale
end

class Genre < ActiveRecord::Base
  has_many :genre_localizations, :dependent => :destroy

  def name(locale = nil)
    locale ||= I18n.locale
    genre_localizations.find_by_locale(locale).name
  end
end

如果我调用genre.name它将返回当前语言环境中流派的名称。

现在我想sunspot solr根据语言环境索引这个模型。我的想法是为每一行存储id,localized_name和的组合。locale这样我就可以通过这种方式搜索流派:

search = Genre.search do
  keywords params[:search]
  with(:locale, 'en')
end

到目前为止,我最好的方法是:

searchable do
  Language.supported_locales.each do |locale|
    integer :id, :stored => true
    text    :name, :stored => true, :using => :name(locale)
    string  :locale
  end
end

但是该行text :name, :stored => true, :using => :name(locale)(显然)无效,我一直在努力寻找一种方法来索引本地化名称。

有没有办法做到这一点?这甚至是获得本地化搜索的正确方法吗?

4

1 回答 1

2

如果这不是一组固定的流派,并且您将翻译存储在该表中,那么只需为每个语言环境创建一个单独的索引字段

searchable do
  integer :id, :stored => true
  Language.supported_locales.each do |locale|
    text :"name_in_#{locale}", :stored => true do
      name(locale)
    end
  end
end

然后限制对本地化名称字段的搜索

search = Genre.search do
  keywords params[:search] do
     fields(:"name_in_#{current_locale}")
  end
end
于 2013-02-14T19:27:13.493 回答