我正在使用rails创建一个大的xml输出,并且rails生成了很多url。有所谓的物品和围栏。每件商品可能有一个外壳。所以我在我的模型中使用了has_one和belongs_to关系。
我正在使用
enclosure_url(item.enclosure, format: :json)
用于生成网址。
我的期望: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]]
是否有任何技巧阻止rails执行此操作或我是否必须自己生成我的URL?
答案 0 :(得分:3)
IMO你有两个选择:
1)使用includes
在一个查询中加载所有enclosures
:
@items = Item.where(...).includes(:enclosure)
2)将id
的{{1}}传递给网址构建器而不是对象:
enclosure
我更喜欢第一个选项,因为它确保您链接的对象确实存在。