2015-05-06 6 views
1

Я создаю сайт электронной коммерции и хочу использовать активную запись, в которой оператор выводит отгрузки, которые относятся к определенному поставщику и определенным состояниям отправки. Вот то, что у меня есть сейчас:Оптимизация оператора Rails Active Record. Where

Spree::Shipment.where("stock_location_id = ? and "state = ?", spree_current_user.supplier.stock_locations.first.stock_location_id, 'shipped' || 'ready') 

Я обнаружил, что это приводит к возврату только «отправленных» утверждений. Я бы хотел, чтобы он отображал как отправленные, так и готовые поставки. Пока я могу только показать, что это один или другой, в зависимости от того, если я поставил «отправленный» или «готов» первым в запросе.

Я предполагаю, что я положил оператор OR (||) в неправильное место, хотя ошибок нет. Может ли кто-нибудь сказать мне правильный способ разместить OR операторов в состоянии в инструкции where?

Спасибо,

  • Brandon

ответ

3
id = spree_current_user.supplier.stock_locations 
     .first.stock_location_id 
Spree::Shipment.where(stock_location_id: id, state: %w[shipped ready]) 
+0

Wow, быстрая реакция. Это выглядит намного чище, чем мой ответ. Я попробую! – Haymaker87

0

я понял, мой ответ, как я выписывал вопрос немного больше. Я хотел бы поделиться этим ответом на случай, если кто-нибудь еще столкнется с этим. Это, казалось, сделать трюк:

Spree::Shipment.where("stock_location_id = ? and (state = ? or state = ?)", spree_current_user.supplier.stock_locations.first.id, 'shipped', 'ready') 

Я тестировал его в консоли и он вернулся этот SQL Output с поставками в обоих «готов» и «погружено» говорится:

Spree::Shipment Load (0.6ms) SELECT "spree_shipments".* FROM "spree_shipments" WHERE (stock_location_id = 8 and (state = 'shipped' or state = 'ready')) LIMIT 15 OFFSET 0 

Надеюсь, это поможет другим. Кроме того, если вы заметили, что это утверждение кажется странным или неэффективным, мне бы очень хотелось узнать.

Спасибо!

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