2016-04-27 27 views
0

我使用rails創建了一個大的xml輸出,並且有很多由rails生成的urls。有所謂的項目和附件。每個項目可能有一個外殼。所以我在我的模型中使用了has_one和belongs_to關係。停止rails url_helper從數據庫請求很多不必要的對象

我使用

enclosure_url(item.enclosure, format: :json) 

生成的URL。

我期望的是:Rails應該根據存儲在items表中的id生成url。

現在發生的情況是,rails會從數據庫中提取每個單個機箱,這會減慢我的系統。

Enclosure Load (2.6ms) SELECT "enclosures".* FROM "enclosures" WHERE "enclosures"."id" = ? LIMIT 1 [["id", 11107]] 
Enclosure Load (3.1ms) SELECT "enclosures".* FROM "enclosures" WHERE "enclosures"."id" = ? LIMIT 1 [["id", 11108]] 
Enclosure Load (0.7ms) SELECT "enclosures".* FROM "enclosures" WHERE "enclosures"."id" = ? LIMIT 1 [["id", 11109]] 
Enclosure Load (1.5ms) SELECT "enclosures".* FROM "enclosures" WHERE "enclosures"."id" = ? LIMIT 1 [["id", 11110]] 
Enclosure Load (6.8ms) SELECT "enclosures".* FROM "enclosures" WHERE "enclosures"."id" = ? LIMIT 1 [["id", 11111]] 

有沒有什麼竅門停止軌道做這個或我必須自己生成我的網址?

回答

3

IMO你有兩種選擇:

1)使用includes加載所有enclosures在一個查詢:

@items = Item.where(...).includes(:enclosure) 

2)傳遞enclosure到網址構建器,而不是對象的id

enclosure_url(id: item.enclosure_id) 

我更喜歡第一個選項,因爲它可以確保您實際鏈接到的對象存在。