Rails奇怪的删除行为

时间:2012-08-02 14:02:36

标签: ruby-on-rails activerecord

对于主题中的“怪异”感到抱歉,这是正在发生的事情。

我有一个看起来像的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'

这里发生了什么? “id”来自哪里?

谢谢,

3 个答案:

答案 0 :(得分:1)

所以让我非常困惑的是,我有分支这个删除工作正在进行。

正确的语法应该是:

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

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

此致

答案 1 :(得分:0)

这可能来自于误用delete方法。试试这个:

BraintreeCache.where(:subscription_id => "12").delete_all

答案 2 :(得分:0)

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

BraintreeCache.find_by_subscription_id("12").delete

编辑:

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

BraintreeCache.delete_all(subscription_id: "12")