2017-11-05 5 views
0

私はActiveモデルレコードの配列を持っています。配列には最大約75個のオブジェクトがあります。しかし、このモデルは複数の関連と関係を持って複雑です。今は、as_jsonメソッドをオーバーライドして、必要なフィールドだけをインクルードします。 60個のオブジェクトをロードするのに約13秒かかります。どうすればこれをスピードアップできますか?私はそれを後で読み込むことができると仮定してget_vehichlesなどのより複雑なクエリを削除しようとしましたが、パフォーマンスを大幅に向上させることはできません。Rails as_jsonパフォーマンスの問題

def as_json 
hash = {} 
hash["title"] = calendar_title 
#hash["description"] = calendar_description 
hash["start"] = start_at.strftime("%Y-%m-%d") 
hash["end"] = end_at.strftime("%Y-%m-%d") 
hash["url"] = "/admin/appointments/#{id}" 
hash["base_amount"] = base_amount 
hash["start_at"] = start_at 
hash["end_at"] = end_at 
hash["tech_id"] = technician_id 
hash["asset_id"] = asset_id 
hash["customer_name"] = customer.full_name(false) 
# hash["customer_id"] = customer_id 
hash["id"] = id 
# hash["cust_addresses"] = customer.addresses 
hash["address"] = address 
# client_host = ClientHost::Location.find_by_id(address.client_host_locations_id) 
# hash["customer_email"] = customer.email 
# hash["customer_wholesale"] = customer.wholesale? 
# hash["customer_tax_exempt"] = customer.tax_exempt? 
# hash["vehicles"] = self.get_vehicles 
end 

def get_vehicles 

vehicles = [] 
self.appointment_vehicles.each do |av| 
    hash = {} 
    hash["appointment_vehicle"] = av 
    hash["total_amount"] = av.total_amount 
    hash["vehicle"] = av.vehicle 
    hash["package_display_title"] = av.package.display_title 
    hash["package_amount"] = av.package.amount 
    hash["upgrades"] = self.get_upgrades(av.upgrades) 
    vehicles.push(hash) 
end 
return vehicles 

エンド

+0

データベースからレコードを取得するためのクエリを表示できますか? –

答えて

0

私はここであなたを取得していますが、私はそれを掘る

require 'oj' 
def get_vehicles 
    vehicles = self.appointment_vehicles.map do |av| 
    { 
     appointment_vehicle: av, 
     total_amount: av.total_amount, 
     vehicle: av.vehicle, 
     package_display_title: av.package.display_title, 
     package_amount: av.package.amount, 
     upgrades: self.get_upgrades(av.upgrades) 
    } 
    end 

    vehicles 
    # Oj.dump(vehicles) <-- if you need this hash as json 
end 

それはどのようだあげるわかりませんか?

これ以外の場合、activerecordクエリは最も時間がかかります。あなたがあなたのレコードを取得するときに実行するSQLクエリを共有することができれば良いでしょうか?