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
Solved ...
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:
Include it in your
search
method:That should do it.
As an added note: you could add an optional
locales
parameter to the search method and pass it towith_translations
to optionally narrow the search to terms in a particular language, say for example in the current locale.