在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
以选择性地将搜索范围缩小到特定语言的术语,例如在当前语言环境中。