我在使用葡萄 api 时遇到性能问题。我有以下型号:
class Profile
has_many :transitive_user_profiles
end
class TransitiveUserProfile < ApplicationRecord
belongs_to :profile
belongs_to :user
belongs_to :client
结尾
class DefaultAddress
belongs_to :user
end
我正在使用葡萄通过rest-api获取所有用户和各自的个人资料
@all_profiles = @all_profiles ||
TransitiveUserProfile.includes(:profile).where(
"profile_id IN (?)", application.profile_ids)
present @users, with: Identity::V3::UserEntity, all_profiles: @all_profiles #@user = User.all - around 700 users
我写了 UserEntity 类
class UserEntity < Grape::Entity
expose :id, as: :uniqueId
expose :trimmed_userid, as: :userId
expose :nachname, as: :lastName
expose :vorname, as: :firstName
expose :is_valid, as: :isValid
expose :is_system_user, as: :isSystemUser
expose :email
expose :utc_updated_at, as: :updatedAt
expose :applications_and_profiles
def email
object.default_address_email
end
def applications_and_profiles
app_profiles = @all_app_profiles.where(user_id: object.id).collect{|t| {name: t.profile.unique_id, rights: t.profile.profilrechte} }
[{:appl_id=>"test", :profiles=>app_profiles}]
end
end
我遇到了问题,当我尝试获取所有用户和个人资料时,它需要超过 15 秒。在以下代码中面临问题(花时间获取关联对象)。
def email
object.default_address_email
end
def applications_and_profiles
app_profiles = @all_app_profiles.where(user_id: object.id).collect{|t| {name: t.profile.unique_id, rights: t.profile.profilrechte} }
[{:appl_id=>"test", :profiles=>app_profiles}]
end
我怎样才能以有效的方式解决(通常少于 5 秒)