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
endThis 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
endYou 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.