我有一对ActiveRecord对象,这些对象具有一个belongs_to … has_many关联,并且has_many关联是定制的.例:
第一个AR对象:
class Car < Vehicle
has_many :wheels, class_name: "Roundobject", foreign_key: :vehicle_id, conditions: "working = 1"
validates_presence_of :wheels
...
end
第二个AR对象:
class Roundobject < ActiveRecord::Base
belongs_to :vehicle
...
end
请注意,以上内容并不表示我的应用程序的功能,只是概述了我的两个AR对象之间的关联.
我遇到的问题是,当我重置缓存(并因此我的Rails应用重新缓存数据库中的所有AR对象)时,到了重新缓存Roundobject对象的时候,它会多次调用数据库中,每个与Roundobjects集合相关联的唯一的vehicle_id.正在运行的sql命令将输出到控制台,因此这是我的输出:
Roundobject Load (2.0ms) SELECT `round_objects`.* FROM `round_objects` WHERE `round_objects`.`vehicle_id` = 28 AND (active = 1)
Roundobject Load (1.0ms) SELECT `round_objects`.* FROM `round_objects` WHERE `round_objects`.`vehicle_id` = 29 AND (active = 1)
Roundobject Load (2.0ms) SELECT `round_objects`.* FROM `round_objects` WHERE `round_objects`.`vehicle_id` = 30 AND (active = 1)
我的应用程序还有其他几个AR对象,它们使用内置的has_many关联而没有任何修改,并且我注意到它们在重置缓存时仅一次访问数据库.例如:
Micropost Load (15.0ms) SELECT `microposts`.* FROM `microposts` INNER JOIN `posts` ON `posts`.`id` = `microposts`.`post_id` WHERE `microposts`.`active` = 1 AND `posts`.`active` = 1
我的问题是,如何使我的AR对象在缓存重置后仅命中数据库一次,同时仍保持所需的自定义has_many关联?我可以手动在被调用的SQL查询上强制加入一个连接,这会有所帮助吗?
谢谢!
解决方法:
您可以在调用Vehicle对象包含Roundobject时使用include方法.
它会像这样:
Vehicle.where(conditions_for_getting_data).includes(:round_object)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。