0

我有一个名为 Token 的简单模型,它有一个 user_id (整数)属性。

如果我这样做:

Token.where(:user_id => 1) 

它返回一条记录。但是当我这样做时:

Token.delete(:user_id => 1)

它给了我这个错误:

ActiveRecord::StatementInvalid: Mysql2::Error: Unknown column 'id.user_id' in 'where clause': DELETE FROM `tokens` WHERE `id`.`user_id` = 1

由于某种原因,它在 SQL 语句中将 id 附加到 user_id 。为什么这样做?它适用于 where 子句。

4

4 回答 4

4

delete需要一个 id 或一个 id 数组:

Token.delete(1)
Token.delete([2,3,4])

要删除符合条件的记录,请delete_all改用:

Token.delete_all(:user_id => 1)

您还可以将其附加到您的查询中:

Token.where(:user_id => 1).delete_all

两者都删除所有带有user_id1 的标记。

于 2013-06-19T09:48:40.433 回答
2

阅读一些文档怎么样?

http://apidock.com/rails/ActiveRecord/Base/delete/class

delete(id) public
于 2013-06-19T09:47:06.150 回答
0
Token.delete_all("tokens.user_id = ?", 1)
于 2013-06-19T09:48:06.860 回答
0

Token.delete需要记录 ID,而不是条件哈希(文档)。

你想要这样的东西:

Token.where(:user_id => 1).delete_all
于 2013-06-19T09:48:32.780 回答