在Rails中对Globalize3表进行简单搜索

我想在Ruby on Rails上使用globalize3 gem时实现一个简单的搜索function。 由于模型的转换存储在单独的表中,因此下面的代码不起作用,因为products表中不再有:name字段。 如何调整以下代码以使搜索function正常?

products_controller.rb

@products = Product.search(params[:search]).all 

index.html.erb

      

模型

 class Product < ActiveRecord::Base translates :name attr_accessible :name, :price, :released_at def self.search(search) if search where('name LIKE ?', "%#{search}%") else scoped end end end 

你很幸运,我最近解决了同样的问题!

幸运的是,答案非常简单。 您可以使用类方法with_translations来包含给定语言环境集的翻译。

这是代码:

 def with_translations(*locales) locales = translated_locales if locales.empty? includes(:translations).with_locales(locales).with_required_attributes end 

将其包含在search方法中:

 def self.search(search) if search with_translations.where('name LIKE ?', "%#{search}%") else with_translations end end 

应该这样做。

作为补充说明:您可以向搜索方法添加可选的locales参数,并将其传递给with_translations以选择性地将搜索范围缩小到特定语言的术语,例如在当前语言环境中。