使用连接重复结果

Duplicate results with joins

本文关键字:结果 连接      更新时间:2023-09-26

我对ruby很不熟悉,我正试图使用join方法来获得属于我的表演的表演者。使用下面的简单代码(在我的head标签中):

window.performances = <%=raw Performance.joins(:performers).to_json(:include => {:performers =>  {
                                                                                        :except => [ :created_at, :updated_at ]
                                                                                        }}, :except => [ :created_at, :updated_at ]) %> ;
alert(JSON.stringify(window.performances));

这工作得很好,除了我得到所有性能的输出两次而不是一次。像这样:

[{"id":1,"date":"2011-12-10","location":"Malgorzaty i Zygmunta Belza","performers":[{"id":1,"name":"Wojtek Szewczuk"},{"id":2,"name":"Danuta Sroka"}]},{"id":1,"date":"2011-12-10","location":"Malgorzaty i Zygmunta Belza","performers":[{"id":1,"name":"Wojtek Szewczuk"},{"id":2,"name":"Danuta Sroka"}]},{"id":2,"date":"2011-12-10","location":"Malgorzaty i Zygmunta Belza","performers":[{"id":1,"name":"Wojtek Szewczuk"},{"id":2,"name":"Danuta Sroka"}]},{"id":2,"date":"2011-12-10","location":"Malgorzaty i Zygmunta Belza","performers":[{"id":1,"name":"Wojtek Szewczuk"},{"id":2,"name":"Danuta Sroka"}]}, ...

我假设它与存在的执行者数量有关,因此每个执行者从数据库生成新的结果。我只是不明白为什么会这样?

我做错了什么,我怎样才能避免重复的结果

, joins 创建 duplicate values 。您可以使用 includes 来删除重复的值。

window.performances = <%=raw Performance.includes(:performers).to_json(:include => {:performers =>  {
                                                                                        :except => [ :created_at, :updated_at ]
                                                                                        }}, :except => [ :created_at, :updated_at ]) %> ;
alert(JSON.stringify(window.performances));

includes 也避免对 DB 生成 N+1 查询。

参见指南了解更多信息。我希望这对你有帮助!