mysql - ActiveRecord::StatementInvalid: Mysql2::在 .where 方法中使用关联名称而不是外键时出错

标签 mysql ruby-on-rails activerecord ruby-on-rails-3.2

我们刚刚将 Rails 应用程序从 3.0.13 更新到 3.2.6,并且在使用 mysql2 的 Active Record 查询接口(interface)的 .where 方法时遇到了一个小问题。

以前的工作原理:

client = Client.first
User.where(:client => client)

现在导致:

ActiveRecord::StatementInvalid: Mysql2::Error: Unknown column 'users.client' in 'where clause': SELECT users.* FROM users WHERE users.client = 1

但是当显式使用外键的列名时,它似乎工作得很好:

client = Client.first
User.where(:client_id => client.id)
#=> Relation of users with the given client_id

关联没有改变(用户属于客户端,客户端有很多用户)。现在这似乎是所有此类协会的问题。

我们现在真的必须更改所有这些where查询以便它们使用foreign_key还是有其他方法?

rails 版本:

gem "rails", "~> 3.2.6"

mysql2版本:

gem "mysql2", "~> 0.3.11"

最佳答案

我们刚刚发现这个功能是由一个名为 meta_where 的 gem 提供的。 ,在 Rails 3.1+ 中已弃用。 还有一个替代方案,squeel ,不幸的是它没有提供完全相同的语法。 (或者我们只是还没有发现......) 现在正在调查...

感谢@zsquare 的指出。

关于mysql - ActiveRecord::StatementInvalid: Mysql2::在 .where 方法中使用关联名称而不是外键时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11395126/

相关文章:

mysql - 与 Rails 一起迷失 has_many : through multiple search

.net - 在 Solaris 上使用 mono 连接到 MySQL

ruby-on-rails - 序列化时未定义的类/模块

mysql - 我无法通过 RoR 访问我自己的 MySQL 服务器?

java - Groovy 静态泛型类型

ruby-on-rails - Rails 正在缓存范围内的结果

mysql - 在分层 Mysql 查询方面需要帮助

javascript - 如何使用 php 或 javascript 将从 mysql 获取的值作为下拉列表中的选定选项

python - 使用 Python 创建 MySQL 游标函数

ruby-on-rails - 向 application_controller 添加一个方法,以便它对所有 Controller 和 View 可见