Как я могу удалить некоторые данные из БД, если нет первичного ключа? - PullRequest
0 голосов
/ 02 июля 2011

Использование RoR 3.0.7. (руб. 1.9.2)

У меня есть таблица книг (модель Book) со следующими полями:

book_id - int (не первичный ключ)

cover_pic - varchar

год - год

Мне нужно удалить * строки из БД, например, с books_id = 1.

Пробовал:

1) Book.where (: book_id => 1) .destroy (ничто)

2) Book.destroy (Book.where (: book_id => 1)) (ничего)

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

obj.destroy

конец

НИЧЕГО .. = (

что я делаю не так?

ТНХ.

UPD

работал нормально delete_all

интересная информация: неопределенный метод `eq 'для nil: NilClass с rails 3 и ruby ​​enterprise на ubuntu hardy

Ответы [ 2 ]

3 голосов
/ 02 июля 2011

Вы можете использовать любой из этих двух:

Это вызовет все обратные вызовы уничтожения

Book.destroy_all( :book_id => 1 ) 

Это не будет

Book.delete_all( :book_id => 1 ) 
1 голос
/ 25 августа 2013

Если у вас есть некоторый уникальный индекс в таблице, это прекрасно работает:

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

Если у вас нет уникального индекса в таблице, выше будет опасно - вы можете уничтожить больше строк, чем предполагалось.Если это так, либо добавьте уникальный индекс в существующий столбец (или столбцы), либо добавьте PK в таблицу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...