我正在使用以下方法在我的应用上国际化模型:
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
,它将返回当前语言环境中的流派名称。
现在我想基于locales使用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)
行显然是无效的,我一直试图找到一种索引本地化名称的方法。
有办法做到这一点吗?这甚至是获得本地化搜索的正确方法吗?
答案 0 :(得分: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