查询相关表以查找满足Rails中条件的所有相关表

时间:2017-10-17 14:56:45

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

我有两张桌子,推车和物品

class Carts
 has_many :items

end

class Items
 belongs_to :carts
end

table Item
 :status string ('auto_assigned', 'deleted', 'added')
 :quantity integer
 :cart_id integer

table Cart
 :item_limit integer

可以将商品添加到购物车或自动分配。项目的状态可以为“已添加”,“自动分配”或“已删除”。 Cart表有一个:item_limit,它是一个整数。我希望创建一个查询,将返回所有其项目为“auto_assigned”的购物车。令我困惑的部分是购物车可能拥有的商品数量多于:item_limit:商品可以具有已删除状态并且可以汇总商品数量。

这是我到目前为止的情况,但这并不是最佳速度:

carts = Cart.all
carts.select{|i| i.items.where(status: 'auto_assigned').sum(:quantity) >= i.item_limit}

1 个答案:

答案 0 :(得分:0)

你可以这样做:

import sys
from PyQt4 import QtCore, QtGui

class StandardItemModel(QtGui.QStandardItemModel):
    ExpandableRole = QtCore.Qt.UserRole + 500

    def hasChildren(self, index):
        if self.data(index, StandardItemModel.ExpandableRole):
            return True
        return super(StandardItemModel, self).hasChildren(index)

class Window(QtGui.QWidget):
    def __init__(self):
        super(Window, self).__init__()
        self.mytreeview = QtGui.QTreeView()
        self.model = StandardItemModel(self.mytreeview)
        self.mytreeview.setModel(self.model)
        layout = QtGui.QVBoxLayout(self)
        layout.addWidget(self.mytreeview)
        self.mytreeview.expanded.connect(self.update_model)
        self.initialise_model()

    def initialise_model(self):
        self.model.clear()
        for file_name_entry in fileobject:
            parent_item = QtGui.QStandardItem(file_name_entry.strip())
            parent_item.setData(True, StandardItemModel.ExpandableRole)
            parent_item.setData("this is a parent", QtCore.Qt.ToolTipRole)
            self.model.appendRow(parent_item)

    def update_model(self, index):
        parent_item = self.model.itemFromIndex(index)
        if not parent_item.rowCount():
            for child_name_entry in parent_text_fileobject:
                child_item = QtGui.QStandardItem(child_name_entry.strip())
                child_item.setData("this is a child", QtCore.Qt.ToolTipRole)
                parent_item.appendRow(child_item)

# dummy test data
fileobject = 'parent1 parent2 parent3'.split()
parent_text_fileobject = 'child_a child_b child_c'.split()

if __name__ == '__main__':

    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

它将返回所有包含状态为auto_assigned的项目的购物车。

字体: https://apidock.com/rails/ActiveRecord/QueryMethods/includes