Для меня это звучит как отличная возможность использовать method_missing
.По сути, мы реализуем метод класса, который прослушивает любой метод, который еще не существует в классе.
Он может выглядеть примерно так:
def self.method_missing(method, *args, &block)
if method.to_s =~ /^find_by_(.*)$/
condition = args.first
options = args.last
first(options[:case_sensitive] == false ? ["UPPER(#{$1}) = UPPER(?)", condition] : ["#{$1} = ?", condition])
else
super
end
end
Теперь вам следуетуметь делать:
find_by_name('name', :case_sensitive => false)
find_by_slug('slug', :case_sensitive => false)
find_by_any_other_column('value', :case_sensitive => false)