2013-06-19 2 views
0

У меня есть простая модель под названием Token, которая имеет атрибут user_id (integer).rails delete unknown column

Если я это сделать:

Token.where(:user_id => 1) 

возвращает запись. Но когда я делаю:

Token.delete(:user_id => 1) 

это дает мне эту ошибку:

ActiveRecord::StatementInvalid: Mysql2::Error: Unknown column 'id.user_id' in 'where clause': DELETE FROM `tokens` WHERE `id`.`user_id` = 1 

По какой-то причине он присоединяет идентификатор user_id в SQL заявления. Почему это так? он отлично подходит для клаузулы.

ответ

3

delete ожидает идентификатор или массив идентификаторов:

Token.delete(1) 
Token.delete([2,3,4]) 

Чтобы удалить записи, соответствующие условию, использовать delete_all вместо:

Token.delete_all(:user_id => 1) 

Вы также можете добавить его в ваш запрос:

Token.where(:user_id => 1).delete_all 

Оба удалить все маркеры с user_id 1.

0
Token.delete_all("tokens.user_id = ?", 1) 
+0

Вы должны объяснить, почему это полезно. –

0

Token.delete ожидает идентификатор записи, а не условие хэш (documentation).

Вы хотите что-то вроде этого:

Token.where(:user_id => 1).delete_all 
+0

Ох! вы наконец начали помогать людям в ROR ... отлично :) :) –

Смежные вопросы