代码之家  ›  专栏  ›  技术社区  ›  Johnny

在RubyActiveRecord中,如果没有ID列,如何销毁记录?

  •  20
  • Johnny  · 技术社区  · 15 年前

    我有一张没有ID列的桌子。当我尝试使用ActiveRecord从中删除时,生成的SQL是 DELETE FROM table_name WHERE ID=NULL 这显然不起作用。是否有任何方法可以使用ActiveRecord从表中删除,或者至少运行带有占位符的原始SQL删除查询(因此它不易受SQL注入攻击)?

    2 回复  |  直到 15 年前
        1
  •  25
  •   anon    15 年前

    是否尝试使用ActiveRecord的“全部删除”方法?我的沙盒里有一段摘录:

    >> 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')

    退房 documentation

        2
  •  10
  •   Zepplock    15 年前
    ActiveRecord::Base.connection.execute('DELETE FROM table_name WHERE ...')
    

    我认为您需要有一个唯一的ID列,ActiveRecord才能正常工作,但我不能100%确定。