Rails Active Record .where语句优化

时间:2015-05-06 02:32:23

标签: ruby-on-rails rails-activerecord where

我正在构建一个电子商务网站,并希望使用有效记录where语句来查找限定为特定供应商和某些货件状态的货件。这就是我现在所拥有的:

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

我发现这导致只返回“已发送”语句。我希望它能显示已发货和已准备好的货件。到目前为止,我只能让它显示一个或另一个,这取决于我是否在查询中首先放置'已发送'或'准备好'。

我猜我已将OR运算符(||)放在错误的位置,即使没有错误。有人能告诉我在OR语句中放置OR运算符的正确方法吗?

谢谢,

  • 布兰登

2 个答案:

答案 0 :(得分:3)

    List<Enemy> enemyList = new Enemy().createList();
    Enemy enemy = enemyList.get(randNum.nextInt(enemyList.size()));
    CharBuilder cb = new CharBuilder();
    cb.createHero();
    CharBuilder character = cb.getHero();
    int charStrength = character.getStrength();
    int charHp = character.getHP();
    int enemyHp = enemy.getHP();
    int enemyStr =enemy.getStr();
    String enemyName = enemy.getName();

答案 1 :(得分:0)

当我更多地写出问题时,我想出了答案。我想分享答案,以防其他人遇到这个问题。这似乎可以解决问题:

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

我在控制台中对其进行了测试,并返回了 SQL输出 ,其中包含“准备”和“已发货”状态的货件:

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

希望这可以帮助别人。另外,如果您注意到这个陈述似乎很奇怪或效率低下,我真的很想知道。

谢谢!