gpt4 book ai didi

mysql - 如何在 Rails 中对整数属性执行匹配查询

转载 作者:行者123 更新时间:2023-11-30 00:13:56 25 4
gpt4 key购买 nike

如果我有一个带有 id(整数)的用户表,并且我尝试使用 arel 构建 sql 查询,我会得到这个。

users  = Arel::Table.new(:users)
users.where(users[:id].matches("foo")).to_sql #=> "SELECT FROM `users` WHERE `users`.`id` LIKE 0"

我需要生成这个sql:

"SELECT FROM `users`  WHERE `users`.`id` LIKE 'foo'"

我有一种感觉,引擎盖下有某种不需要的类型转换地方。

更新:

我最终通过使用 Arel::Nodes::SqlLiteral 类的实例解决了这个问题。

str = Arel::Nodes::SqlLiteral.new("'foo'")
users.where(users[:id].matches(str)).to_sql #=> "SELECT FROM `users` WHERE `users`.`id` LIKE 'foo'"

最佳答案

这是因为您尝试在 INT 类型列上构建查询。因此,Rails 尝试将 'foo' 转换为 Integer,即 0

以下将为列的正确数据类型生成预期的查询:

users.where(users[:name].matches("foo")).to_sql #=> "SELECT FROM `users`  WHERE `users`.`name` LIKE 'foo'"

因此,就您的情况而言,您应该尝试这样的操作:

users.where(users[:id].matches(1)).to_sql #=> "SELECT FROM `users`  WHERE `users`.`id` LIKE 1"

希望对您有所帮助。

关于mysql - 如何在 Rails 中对整数属性执行匹配查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23813789/

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