Итак, в rails-api, над которым я работаю, мы в настоящее время пытаемся оптимизировать некоторые более длительные вызовы, и у меня возникла проблема с функциональностью .includes , У меня это работает в большинстве ситуаций, но есть одна конкретная ситуация, когда он не работает так, как я этого хочу.Рельсы включают кеш, который не используется в методе модели
Вот пример:
класс пользователя
class User < ActiveRecord::Base
has_many :images
has_one :active_image, -> { where(images: { active_image: true })}, class_name: 'Image'
has_many :facebook_auth
def get_profile_image
if active_image
active_image.image.url(:profile)
else
facebook = facebook_auth.last
if facebook
"https://graph.facebook.com/#{facebook.provider_user_id}/picture?width=150&height=150"
end
end
nil
end
end
Контроллер:
class UserController < BaseAPIController
def get_user_image
user_id = params[:user_id]
user = User.includes(:active_image, :facebook_auth).find(user_id)
render json: user.get_profile_image
end
end
С этим, я бы предположить, что .includes(:active_image, :facebook_auth)
бы кэшировать данные так, что, когда я называю их в метод get_profile_image, он не делает больше вызовов db, но это не так. Что я здесь делаю неправильно?
Спасибо, Charlie
Вы должны включить active_image слишком –
А, это только опечатка. В моем фактическом коде я это делаю. Я исправлю это. –
у вас также есть опечатка в 'render json: user.get_profile_image' is' render json: user.get_profile_images' – neydroid