我正在为Ruby on Rails使用globalize3 gem时实现一个简单的搜索功能。由于模型的翻译存储在单独的表中,因此以下代码不起作用,因为产品表中不再存在:name字段。如何调整下面的代码以正确执行搜索功能?
products_controller.rb
@products = Product.search(params[:search]).all
index.html.erb
<%= form_tag products_path, method: :get do %>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag "Search", name: nil %>
<% end %>
模型
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
来包含给定语言环境集的翻译。
这里是代码:
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