2010-02-14 6 views
3

У меня есть Order и Orderdetailsграф с has_many в рельсах

Orderdetails belongs_to Order 

Order has_many Orderdetails 

Я пытаюсь преобразовать следующий запрос в ActiveRecord count функции

select Count(*) 
from orderdetails A, orders B 
where A.prodid='6' and A.orderid= B.id and B.custid='11' 

Я попытался:

@count = Orderdetail.count(:conditions => "prodid = 6 and order.custid = 11") 

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

PGError: ERROR: syntax error at or near "order" 
LINE 1: ...unt_all FROM "orderdetails" WHERE (prodid = 6 and order.cust... 

Редактировать Я изменил заказ s

но теперь я получаю эту ошибку:

ActiveRecord::StatementInvalid: PGError: ERROR: missing FROM-clause entry for table "orders" LINE 1: ...unt_all FROM "orderdetails" WHERE (prodid = 6 and orders.cus...

+0

Не должно ли имя таблицы быть «заказами»? – giorgian

+0

dope. что-то зафиксировало. теперь я получаю другую ошибку. как я могу добавить заказы из? – ratan

ответ

4

Вам нужно добавить :joins => :order', потому что ваше состояние содержит элемент из таблицы заказов (именно поэтому вы получите ошибку missing FROM-clause), попробуйте:

@count = Orderdetail.count(:joins => :order, :conditions => "prodid = 6 and orders.custid = 11") 

Также лучше (безопаснее), чтобы использовать массив в условиях:

@count = Orderdetail.count(:joins => :order, :conditions => ["prodid = ? and orders.custid = ?", 6, 11]) 
-1

Я думаю, что вы должны тщательно прочитать некоторые документы о том, как ассоциации работают в рельсах. Try this guide.

Вам не нужно писать SQL-код в :conditions, чтобы сделать все, что вам нужно.

+0

В этом руководстве ничего не говорится о том, как делать счет с помощью activerecord? – ratan

+0

После того, как вы знакомы с тем, как работают ассоциации, вы можете начать чтение документов: как документы для 'count' - http://api.rubyonrails.org/classes/ActiveRecord/Calculations/ClassMethods.html#M002187 – rfunduk