Simple search on a Globalize3 table in Rails
globalize3, ruby-on-rails, ruby-on-rails-3, search
Solution
You're in luck, I tackled exactly the same problem recently!
Luckly for you the answer is quite simple. You can use the class method `with_translations` to include translations for a given set of locales.
Here's the code:
def with_translations(*locales)
locales = translated_locales if locales.empty?
includes(:translations).with_locales(locales).with_required_attributes
end
Include it in your `search` method:
def self.search(search)
if search
with_translations.where('name LIKE ?', "%#{search}%")
else
with_translations
end
end
That should do it.
As an added note: you could add an optional `locales` parameter to the search method and pass it to `with_translations` to optionally narrow the search to terms in a particular language, say for example in the current locale.
Problem
I am looking to implement a simple search function while using the globalize3 gem for Ruby on Rails. Since the translations of the model are stored in a separate table, the code below doesn't work as there is no longer a :name field in the products table. How can I adjust the code below to make the search function correctly? 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 %> ``` 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 ```