我希望在使用 Ruby on Rails 的 globalize3 gem 时实现一个简单的搜索功能。由于模型的翻译存储在单独的表中,因此下面的代码不起作用,因为产品表中不再有 :name 字段。如何调整下面的代码以使搜索功能正确?
产品控制器.rb
@products = Product.search(params[:search]).all
索引.html.erb
<%= form_tag products_path, method: :get do %>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag "Search", name: nil %>
<% end %>
model
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 https://github.com/svenfuchs/globalize3/blob/master/lib/globalize/active_record/class_methods.rb#L10包括一组给定语言环境的翻译。
这是代码:
def with_translations(*locales)
locales = translated_locales if locales.empty?
includes(:translations).with_locales(locales).with_required_attributes
end
将其包含在您的search
method:
def self.search(search)
if search
with_translations.where('name LIKE ?', "%#{search}%")
else
with_translations
end
end
应该可以做到这一点。
作为补充说明:您可以添加可选的locales
参数到搜索方法并将其传递给with_translations
可选择将搜索范围缩小到特定语言的术语,例如当前区域设置。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)