gpt4 book ai didi

ruby-on-rails - 在带有连接的 where 子句中传递符号和字符串有什么区别

转载 作者:数据小太阳 更新时间:2023-10-29 08:02:57 24 4
gpt4 key购买 nike

我有两个模型 User 和 Book。用户有用户名和电子邮件字段,书籍有作者和标题字段。当我使用联接根据关联数据以及在 where 子句中传递的条件获取用户时,我得到了不同的结果

  1. 当我运行它时

    User.joins(:books).where('author = ? ','xxxx')

生成的 Mysql 查询是:

 "SELECT `users`.* FROM `users` INNER JOIN `books` ON `books`.`user_id` = `users`.`id` WHERE (author = 'xxxxx' )"

给我的用户的书包括 xxxx 作者而

  1. 当我运行它时

    User.joins(:books).where(author: 'xxxx')  

生成的 Mysql 查询是:

"SELECT `users`.* FROM `users` INNER JOIN `books` ON `books`.`user_id` = `users`.`id` WHERE `users`.`author` = 'xxxx'"> 

给出 Mysql2::Error: Unknown column 'users.author' in 'where clause':

 SELECT `users`.* FROM `users` INNER JOIN `books` ON `books`.`user_id` = `users`.`id` WHERE `users`.`author` = 'xxxx' 

ActiveRecord::StatementInvalid:Mysql2::Error:“where 子句”中的未知列“users.author”:SELECT users.* FROM users INNER JOIN book ON bookuser_id = usersid WHERE users.author = 'Dan Brown'

我的问题: 是当我在 where 子句中传递一个字符串封装的字段和值时它给我结果但是当我在 where 子句中传递一个符号时它给我 mysql 未知列错误。那么在符号传递和字符串传递中ruby解释器是如何知道从哪里获取数据的呢

最佳答案

当我们连接表格时,尤其是在 rails 中,rails 有能力为连接的表格取别名。

您的查询, User.joins(:books).where(author: 'xxxx')user表中搜索author字段

User.joins(:books).where(author: 'xxxx') 总是取第一个表的字段

User.joins(:books).where('author = ? ','xxxx') 在两个表中搜索<​​/strong>

例如,User.joins(:books).where('id = ? ','xxxx'),试试这个查询。

在上面你会得到一个错误,因为 id 字段存在于两个表中并且它变得困惑

但是,

User.joins(:books).where(id: 'xxxx') 有效,因为它只在用户表中搜索。

所以,你可以使用,通过书籍引用作者 books: {author: 'xxxx'}

User.joins(:books).where(books: {author: 'xxxx'})   // your required query

User.joins(:books).where('author = ? ','xxxx')

关于ruby-on-rails - 在带有连接的 where 子句中传递符号和字符串有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38502432/

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