每当我运行where子句时,在我尝试从结果中访问实际数据之前不会执行查询。无论如何我可以让它自动执行。
示例:
delete_list = Rom::Leaderboard.where("pvp_type = ? AND server_id = ?", pvptype, server_id)
delete_list现在包含一个ActiveRecord对象。但我希望它能够保存结果数组,而不必像
那样运行delete_list.each ...
答案 0 :(得分:1)
要急切加载整个查询,您可以使用.all
,如:
delete_list = Rom::Leaderboard.where(...).all
这将导致delete_list
成为数组。
答案 1 :(得分:0)
好吧,如果您只是想删除,请立即调用destroy_all
或delete_all
Rom::Leaderboard.where("pvp_type = ? AND server_id = ?", pvptype, server_id).destroy_all
OR
delete_list = Rom::Leaderboard.where("pvp_type = ? AND server_id = ?", pvptype, server_id)
delete_list.destroy_all
至于destroy_all
和delete_all
之间的区别。
destroy_all
:通过调用destroy方法将相关对象与此对象一起销毁。这将有效地循环遍历每个对象,在其上调用destroy
。因此,每个对象至少有一个查询。delete_all
:立即销毁所有关联对象,而不调用它们:destroy方法。这基本上使用您的where子句创建单个delete from leader_boards
查询。因此,无论您有多少个对象,它只运行1个查询。但是,不会清除任何关联的对象。