невозможно определить количество строк Ruby-On-Rails

Я пытаюсь создать тележку в ruby ​​on rails, мне нужно показать вывод следующим образом: У вас есть 3 предмета в вашей корзине (3 - это количество предметов в моей корзине), и я пытаюсь найти количество строк в таблице. line_items, где cart_id равен 5.

@line_items.find(:all, :condition => { :cart_id => "5"}).count

если кто-нибудь знает, как я должен написать это, пожалуйста, дайте мне знать .. Спасибо заранее


person Umer Hassam    schedule 21.03.2011    source источник


Ответы (2)


Вы можете сделать это медленным способом:

YourModelClass.find(:all, :conditions => { :card_id => 5 }).count

или быстрый способ:

YourModelClass.count(:conditions => { :card_id => 5 })

Быстрый способ просто выполняет COUNT(*) внутри базы данных, медленный способ извлекает весь результирующий набор из базы данных, превращает его в объекты, а затем подсчитывает их.

Также есть современный способ Rails3+:

YourModelClass.where(:card_id => 5).count

Это делает select count(*) from t where card_id = 5 внутри базы данных. Однако не используйте это:

YourModelClass.count(:card_id => 5)

Это сделает select count(card_id = 5) from t и совсем не похоже на то, что вы хотите.

person mu is too short    schedule 21.03.2011
comment
Вау, второй вариант - элегантное решение, теперь последнее, если вы не возражаете, как я могу поместить переменную вместо 5, что я в основном пытаюсь сделать, это {:cart_id =› @cart.id } но это не работает .. @cart.id должен дать мне идентификатор текущей корзины, и это нормально, он возвращает 5, но все это не подходит друг к другу ... ? помощь :( - person Umer Hassam; 21.03.2011
comment
@umer hassam: {:cart_id => @cart.id } должно быть хорошо, если @cart.id дает правильное значение. Вы уверены, что у вас нет случайных кавычек (например, {:card_id => "@card.id"})? - person mu is too short; 21.03.2011
comment
@umar..это выдает ошибку или 0..Если это 0, это может быть потому, что @line_items нет записи с card_id 5.. - person rubyprince; 21.03.2011
comment
да, это дает ноль, но я дважды проверил, что line_item содержит три строки, где cart_id равен 5. есть еще одна вещь, я пишу все это в haml, в представлении вы не думаете, что мне придется использовать #{ } для этого. ... сейчас я пишу это как: =link_to(@line_items.count(:conditions =› { :cart_id =› @cart.id }), :controller =› 'carts', :action =› 'show') - person Umer Hassam; 21.03.2011
comment
@umer hassam: Извините, я ничего не знаю о хамле. OTOH, .count — это метод класса (т. е. YourModelClass.count(...)), а не метод экземпляра (т. е. @line_items.count(...)), поэтому может работать что-то вроде @line_items.class.count(:conditions => { :cart_id => @cart.id }). - person mu is too short; 21.03.2011

это должно быть что-то одно, линия

LineItem.count(:conditions => {:cart_id => 5})

так как я действительно не знаю, как называется модель и ассоциация... надеюсь, это поможет =)

person Staelen    schedule 21.03.2011
comment
не могли бы вы помочь мне с последней вещью, если вы не возражаете, как я могу поставить переменную вместо 5, что я в основном пытаюсь сделать, это {:cart_id =› @cart.id }, но это не не работает.. @cart.id должен дать мне идентификатор текущей корзины, и это нормально, он возвращает 5, но все это не подходит друг к другу ... ? помощь - person Umer Hassam; 21.03.2011
comment
вы можете просто сделать это: @cart.line_items.count =) - person Staelen; 21.03.2011