0

对不起,主题中的“奇怪”,这就是正在发生的事情。

我有一个看起来像这样的 ActiveRecord 对象:

class BraintreeCache < ActiveRecord::Base
belongs_to :company, :foreign_key => :subscription_id
serialize :subscription
serialize :credit_card
end

执行:

BraintreeCache.delete(:subscription_id => "12")

将返回:

ActiveRecord::StatementInvalid: PGError: ERROR:  missing FROM-clause entry for table "id"
LINE 1: DELETE FROM "braintree_caches" WHERE "id"."subscription_id" ...
                                             ^
: DELETE FROM "braintree_caches" WHERE "id"."subscription_id" = '12'

这里发生了什么?“身份证”从何而来?

谢谢,

4

3 回答 3

1

所以让我非常困惑的是我有这个删除正在处理的分支。

正确的语法应该是:

BraintreeCache.delete_all(:subscription_id => "42")

我仍然无法弄清楚简单的删除是如何工作的。

问候,

于 2012-08-02T14:45:21.387 回答
0

静态删除方法需要一个 ID 作为第一个参数,而不是哈希。尝试这个:

BraintreeCache.find_by_subscription_id("12").delete

编辑:

如果您不想先实例化对象,也可以使用delete_all方法:

BraintreeCache.delete_all(subscription_id: "12")
于 2012-08-02T14:10:06.493 回答
0

它可能来自滥用delete方法。试试这个:

BraintreeCache.where(:subscription_id => "12").delete_all
于 2012-08-02T14:09:37.560 回答