gpt4 book ai didi

ruby-on-rails - Rails - 3.0.6 到 3.0.14 activerecord、多重连接和 where 子句异常

转载 作者:行者123 更新时间:2023-12-02 00:20:23 25 4
gpt4 key购买 nike

所以.. 刚从 3.0.6 升级到 3.0.14,我的一项测试开始严重失败(太棒了!)。它指出(我认为)我的 where 子句的格式不正确,我一直在“逃避它”。只是想确认一下(如果有人能指出我在哪里可以找到记录此更改的文档)。

部分代码:

@fields = Field.joins(:region => :country).where(:regions => {:country_id => @country}).order(:name)

生成快乐的 SQL

 "SELECT `fields`.* FROM `fields` INNER JOIN `regions` ON `regions`.`id` = `fields`.`region_id` INNER JOIN `countries` ON `countries`.`id` = `regions`.`country_id` WHERE `regions`.`country_id` = 5 ORDER BY name"

但是这个查询...

@pools = Pool.joins(:field => {:region => :country}).where(:fields => {:regions => {:country_id => @country }},:confirmed => true).order(:leaving_date)

这会在 3.0.6 中生成正常的 SQL

"SELECT `pools`.* FROM `pools` INNER JOIN `fields` ON `fields`.`id` = `pools`.`field_id` INNER JOIN `regions` ON `regions`.`id` = `fields`.`region_id` INNER JOIN `countries` ON `countries`.`id` = `regions`.`country_id` WHERE `pools`.`confirmed` = 1 AND `regions`.`country_id` = 5 ORDER BY leaving_date"

但在 3.0.14 中它有一个国家 ID 的 borked 值(似乎是整个事件记录?)

"SELECT `pools`.* FROM `pools` INNER JOIN `fields` ON `fields`.`id` = `pools`.`field_id` INNER JOIN `regions` ON `regions`.`id` = `fields`.`region_id` INNER JOIN `countries` ON `countries`.`id` = `regions`.`country_id` WHERE `pools`.`confirmed` = 1 AND `fields`.`regions` = '--- \\n:country_id: !ruby/ActiveRecord:Country \\n  attributes: \\n    name: Test Country 1\\n    latitude: \\\"13.456\\\"\\n    created_at: 2012-06-27 10:28:46 Z\\n    updated_at: 2012-06-27 10:28:46 Z\\n    id: 2\\n    cached_slug: test-country-1\\n    longitude: \\\"46.789\\\"\\n    message: \\n    zoom: 4.0\\n' ORDER BY leaving_date"

只是想知道是否有人可以解释这里发生了什么。我怀疑它可能永远不会奏效..

最佳答案

应该是这样

Pool.joins(:fields => {:region => :country}).
where(:regions => {:country_id =>@country})

仅仅因为您通过另一个表加入表并不意味着您需要在 where 子句中做同样的事情 - 您想要的只是表单的条件

regions.country_id = 1

这曾经是偶然工作的,不幸的是,同样的事故也可能允许人们注入(inject)恶意制作的值,因此在 rails 3.0.13/14 security releases 中得到修复。

据我所知,这不应该起作用,实际上没有任何关于它被删除的文档。

关于ruby-on-rails - Rails - 3.0.6 到 3.0.14 activerecord、多重连接和 where 子句异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11224240/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com