我需要找到没有孩子或只有所有孩子的父母(状况= 1)。
class Parent
has_many :children
end
class Child
enum status: [ :confirmed, :not_confirmed ]
belongs_to :parent
end
我知道第一部分是找到没有孩子的父母。
Parent.joins(:children).where('count(children) = 0')
确定答案。
答案 0 :(得分:1)
由于您使用的是Postgres,因此可以使用NOT EXISTS
查询:
# Parents with no children
Parent.where.not('exists (?)', Child.where('children.parent_id = parents.id').select(1))
此查询的性能比任何需要连接的查询都要好,因为EXPLAIN
将向您显示Postgres将通过Nested Loop Anti Join
操作来完成此操作。
答案 1 :(得分:0)
这是Rails中的解决方案:
<select id="drpQuantity" onchange="setUrl(this)">...</select>
<script>
function setUrl(element) {
var value = element.value;
document.getElementById('link').href = '@Url.Action("AddNewItems", "Home", new { ItemId = QitemId })' + '&Quantity=' + selected;
}
</script>
基本上,您需要使用<a id="link" href="/Home/AddNewItems?ItemId=1&Quantity=1">Add New</a>
(请参阅Rails5 Reference中的grp = Parent.left_outer_joins(:children).distinct
models = grp.where('children.id IS NULL').or(grp.where('children.status = 1'))
)。
我认为您的第一部分示例无效。它将返回错误消息,例如
LEFT OUTER JOIN
Rails left_outer_joins
也是# ActiveRecord::StatementInvalid (PG::GroupingError: ERROR:
# aggregate functions are not allowed in WHERE
。