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

问题描述 投票:6回答:2

我正在为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
ruby-on-rails ruby-on-rails-3 search globalize3
2个回答
16
投票

您很幸运,我最近解决了完全相同的问题!

很幸运,您的答案很简单。您可以使用类方法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,以可选地将搜索范围缩小为特定语言的字词,例如在当前语言环境中。


0
投票

已解决...

with_translations
© www.soinside.com 2019 - 2024. All rights reserved.