Вы можете использовать ActiveRecord::QueryCache.uncached
так:
User.find_by_email('test@test.test')
User.find_by_email('test@test.test') # Will return cached result
User.uncached do
User.find_by_email('test@test.test')
User.find_by_email('test@test.test') # Will query the database again
end
В контроллере это будет выглядеть примерно так:
def show # users#index action
User.uncached do
@user = User.find_by_email('test@test.test')
@another_user = User.find_by_email('test@test.test') # Will query database
end
User.find_by_email('test@test.test') # Will *not* query database, as we're outside of the Users.uncached block
end
Очевидно, что в модели вам просто нужно сделать:
class User < ActiveRecord::Base
def self.do_something
uncached do
self.find_by_email('test@test.test')
self.find_by_email('test@test.test') # Will query database
end
end
end
User.do_something # Will run both queries