在铁轨上-
我需要对数据库执行 sql 查询;该查询与任何特定模型无关,它可以混合来自多个表或其他表的数据。我有办法做到这一点=-
首先是通过对模型执行查询并捕获这样的结果-
- res=User.find_by_sql("select * from customers joins and conditions")
- res=User.find_by_sql("select * from [other table] joins and conditions")
这种方法存在问题,我对此感到不舒服,因为在用户类对象中我正在捕获其他表的数据。就像第一个查询结果有来自客户表的数据,所以在用户对象中我得到了客户的属性。更有趣的问题是 - 如果结果查询具有 id 属性,那么
res.first.id 将是客户的 id,如果用户模型与 UserRoles 模型有关系,并且如果我使用 res.first.roles 访问此关系,那么它将从 UserRole 获取角色以获取客户 ID,这是完全错误的。
并且也可能存在问题。
所以我认为它有很多混乱。
好的部分是我们不需要处理连接,结果将是一个对象数组。因此使用 res.first.id 访问对象属性更容易像 row["id"] 一样。
- 第二种使用 ActiveRecord 连接并执行查询的方法
我们res = ActiveRecord::Base.connection.query("sql query")
可以使用 select_one、select_all 代替查询,也可以使查询参数化。
它的问题是它返回哈希数组,但我需要对象数组以便在代码中轻松访问。所以我写了一个类来将哈希转换为对象(我认为 rail 在后台做同样的事情)并且工作正常。
所以我需要一些关于方法的建议,并且需要决定哪一个更好。