我有一个没有ID列的表。当我尝试使用ActiveRecord从中删除时,生成的SQL为DELETE FROM table_name WHERE ID=NULL
,这显然不起作用。有没有办法使用ActiveRecord从表中删除,或者至少用占位符运行原始SQL删除查询(所以它不容易受SQL注入攻击)?如何销毁没有ID列的记录在ruby ActiveRecord中?
17
A
回答
24
您是否尝试过使用ActiveRecord的delete_all方法?下面是我的一个沙箱的摘录:
>> customer = Customer.new(:login => 'foo')
=> #<Customer id: nil, status: 0, name: nil, login: "foo", password: nil, salt: nil, api_key: nil, address: nil, town: nil, state: nil, country: "USA", zipcode: nil, balance: #<BigDecimal:1032669b0,'0.0',9(18)>, discount: 0, last_four_cc: nil, auto_renew: false, contact_name: nil, contact_email: nil, domain: "anon.limelock.com", created_at: nil, updated_at: nil>
>> customer.save
=> true
>> Customer.all.count
=> 4
>> Customer.delete_all(:login => 'foo')
=> 1
>> Customer.all.count
=> 3
生成的SQL是DELETE FROM `customers` WHERE (`customers`.`login` = 'foo')
8
这是要走的路。我正要回答这个问题。 – 2010-06-05 14:59:15
这不适用于所有情况。我有一个模型游戏和一个模型AppVersion。游戏has_many:app_versions。 'Game.first.app_versions.delete_all'产生'DELETE FROM'app_versions'WHERE'app_versions'。''= NULL',这是一个错误。 – 2012-02-14 12:53:19
当你在一个关系上使用它时,Rails4.2说在'.delete_all'方法中,只有两个选项可以传递:':nullify',它在foreing_keys和':delete_all'上设置null,它实际上删除了这些对象。默认值是':nullify'。 – mariowise 2015-05-26 12:43:01