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

Ruby on rails 如果没有主键,如何从数据库中删除一些数据?,ruby-on-rails,Ruby On Rails,使用RoR 3.0.7。(ruby 1.9.2) 我有一个带有以下字段的表格书(模型书): book_id-int(非主键) 封面图片-varchar 年复一年 例如,我需要从数据库中删除books_id=1的*行 已尝试: 1) Book.where(:Book_id=>1)。销毁(无) 2) Book.destroy(Book.where(:Book_id=>1))(nothing) (三) Book.where(:Book_id=>1)。每个do|obj| 毁灭 结束 没什么=( 我做错了

使用RoR 3.0.7。(ruby 1.9.2)

我有一个带有以下字段的表格书(模型书):

book_id-int(非主键)

封面图片-varchar

年复一年

例如,我需要从数据库中删除books_id=1的*行

已尝试:

1) Book.where(:Book_id=>1)。销毁(无)

2) Book.destroy(Book.where(:Book_id=>1))(nothing)

(三) Book.where(:Book_id=>1)。每个do|obj|

毁灭

结束

没什么=(

我做错了什么

thx

UPD

一切都很好

有趣的信息:

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

这将触发所有销毁回调

Book.destroy_all( :book_id => 1 ) 
这不会

Book.delete_all( :book_id => 1 ) 

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

这将触发所有销毁回调

Book.destroy_all( :book_id => 1 ) 
这不会

Book.delete_all( :book_id => 1 ) 
假设您在表上有一些唯一的索引,这非常有效:

book = Book.first
Book.delete_all(book.attributes)
如果表中没有唯一的索引,则上述情况是危险的。您可能会超出预期的行数。如果是这种情况,请在现有列上添加唯一索引,或者在表中添加PK。

假设表中有一些唯一索引,这非常有效:

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

如果表上没有唯一索引,则上述情况是危险的-您可能会超出预期的行数。如果是这种情况,请在现有列上添加唯一索引或者在表中添加一个PK。

您是否使用了任何gems,或者这是香草rails?standart gems…刚刚用gem update更新了gems--系统和gem update…现在有了rails 3.0.9,但有相同的错误您是否使用了任何gems,或者这是香草rails?standart gems…刚刚用gem update更新了gems--系统和gem update…现在有了rails 3.0.9但如果没有为表定义的主键,则同样的错误
destroy\u all
实际上无法工作。这就是为什么您看到nil:NilClass`error的
undefined方法
eq',如果没有PK,则无法工作!请使用delete\u all(attr:val)相反,如果没有为表定义的主键,
destroy\u all
实际上无法工作。这就是为什么您看到nil:NilClass`error的
undefined方法
eq',如果没有主键,则无法工作!请改用delete\u all(attr:val)