如何用includes方法查询含/不含content settings的Content数据
使用includes实现目标查询
要将原有的left_outer_joins查询替换为includes实现,你可以结合references方法确保生成正确的LEFT OUTER JOIN语句,同时保留原有筛选逻辑:
contents = Content.includes(:content_setting) .where('content_settings.editor_type = ? OR content_settings.id IS NULL', '0') .references(:content_setting)
关键说明:
includes(:content_setting):用于预加载关联的content_setting数据,避免后续访问关联时出现N+1查询问题。- 原有的
where条件完全保留,用来筛选两种目标数据:关联的content_setting中editor_type为'0'的Content,以及没有关联content_setting的Content。 .references(:content_setting):这是必须的,因为当includes配合针对关联表的where条件时,Rails需要明确引用该关联表,否则会默认执行两次独立查询(先查所有Content,再查符合条件的ContentSetting),导致筛选逻辑无法正确作用在Content集合上。
内容的提问来源于stack exchange,提问作者humanoid
相关产品推荐
相关产品推荐

