我有一个没有ID列的表。当我尝试使用ActiveRecord从其中删除时,生成的SQL是DELETE FROM table_name WHERE ID=NULL
,这显然不起作用。有没有什么方法可以使用ActiveRecord从表中删除,或者至少运行一个带有占位符的原始SQL delete查询(这样它就不会受到SQL注入的攻击)?
发布于 2010-06-05 10:00:57
你有没有试过使用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')
。
发布于 2010-06-05 06:39:47
ActiveRecord::Base.connection.execute('DELETE FROM table_name WHERE ...')
我认为ActiveRecord需要有一个唯一的id列才能正确运行,但我不能百分之百确定。
https://stackoverflow.com/questions/2978219
复制相似问题