Search on translated attributes with Mobility and Ransack.
Just add the gem to your Gemfile:
gem 'mobility-ransack', '~> 1.2.2'
Now enable the ransack
plugin in Mobility's configuration:
Mobility.configure do
plugins do
ransack
# ...
end
end
This will enable the ransack plugin for all models. Disable it by passing
false
to the ransack
option:
class Post < ApplicationRecord
extend Mobility
translates :foo, ransack: false
end
You can search on foo
with Ransack just like any untranslated attribute, e.g.
if Post
has a title
attribute translated with the Jsonb backend:
Post.ransack(title_cont: "foo").result
#=> SELECT "posts".* FROM "posts" WHERE ("posts"."title" ->> 'en') ILIKE '%foo%'
Other backends work exactly the same way.
The gem is available as open source under the terms of the MIT License.