如果没有主键,如何从数据库中删除一些数据?

时间:2011-07-02 16:23:48

标签: ruby-on-rails

使用RoR 3.0.7。 (红宝石1.9.2)

我有一本表格书(模型书),其中包含以下字段:

book_id - int(不是主键)

cover_pic - varchar

年 -

我需要删除DB中的*行,例如books_id = 1。

尝试过:

1)Book.where(:book_id => 1).destroy(nothing)

2)Book.destroy(Book.where(:book_id => 1))(无)

3) Book.where(:book_id => 1).each do | obj |

obj.destroy

没什么.. =(

我做错了什么?

THX。

UPD

工作正常delete_all

有趣的信息: undefined method `eq' for nil:NilClass with rails 3 and ruby enterprise on ubuntu hardy

2 个答案:

答案 0 :(得分:3)

您可以使用以下两种方法之一:

这将触发所有销毁回调

Book.destroy_all( :book_id => 1 ) 

这不会

Book.delete_all( :book_id => 1 ) 

答案 1 :(得分:1)

假设桌面上有一些唯一索引,这很有用:

book = Book.first
Book.delete_all(book.attributes)

如果您在桌面上没有唯一索引,则上面的危险 - 您可能会比预期更多的行。如果是这种情况,请在现有列(或列)上添加唯一索引,或者向表中添加PK。