gpt4 book ai didi

mysql - 如何从原始 sql 查询中获取 ActiveRecord 模型实例?

转载 作者:行者123 更新时间:2023-11-29 01:13:12 25 4
gpt4 key购买 nike

在 Rails 中,有时我想用 MySQL 做一个查询,这对单独使用 ActiveRecord 方法来说太复杂了。所以我通常会执行以下操作来取回哈希数组:

query = "SELECT * FROM ..."

result = ActiveRecord::Base.connection.exec_query.to_a

通常我可以摆脱这种情况,但有时我仍然需要我的模型的实例数组,以便我可以将它们用于 CRUD。

在那种情况下,我试过这个:

result.map{|u| User.new(u)}

在我尝试创建、保存或更新之前,这一切正常。发生这种情况时,我会收到一条错误消息,告诉我已存在具有相同 ID 的记录。

不知何故,ActiveRecord 已经知道如何使用它能够构造的查询来执行此操作。我怎样才能做同样的事情并做到这一点,以便我可以将复杂的原始查询转换为模型实例的集合,这些实例将改变表而不是尝试插入和失败?

最佳答案

使用find_by_sql例如

User.find_by_sql("SELECT * FROM user...")

result.map{|u| 的麻烦User.new(u)} 是创建新的 User 对象,其属性取自 exec_query 返回的哈希值,但这些对象被视为新的、未保存的如果您随后尝试保留它们,Active Record 模型就会与现有记录发生冲突。

也就是说,Active Record 查询接口(interface)非常灵活,因此值得发布一些您需要的查询示例,看看是否可以在不借助原始 SQL 的情况下对这些进行建模。

关于mysql - 如何从原始 sql 查询中获取 ActiveRecord 模型实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29134085/

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