我的桌子叫做像这样的谈判
id seller_id buyer_id property_id
1 4 190 33123
2 4 190 33123
3 5 191 34000
4 5 191 34000
5 6 200 35000
我可以通过以下方式获取所有内容:
Negotiation.all
我想要抓取所有内容,但按seller_id
- buyer_id
- property_id
组合分组。在上面的示例中,我想返回三个组。
这可以在我的rails应用程序中使用吗?
答案 0 :(得分:5)
您可以使用Enumerable#group_by
:
Negotiation.all.group_by{ |x| [x.seller_id, x.buyer_id, x.property_id] }
答案 1 :(得分:0)
我想你可以实现这一点,创建一个范围,它会采用你在Negotiation
模型中定义的一些参数。我不是100%正确的语法,但相信这种方法是最合适的。
scope :seller_buyer_property_combo, ->(seller, buyer, property) {
where("negotiations.seller_id = ? AND
negotiations.buyer_id = ? AND
negotiations.property_id = ?", seller.id, buyer.id, property.id) }
此语法遵循给出here的建议:
例如,在Rails中,问号被库的编程语言(Ruby)的变量给出的参数替换,例如:
Table.where("column = ?", "value")
并自动引用参数以避免错误和SQL注入,生成如下语句:
SELECT * FROM Table WHERE column = 'value';
引用会在以下情况下保存我们:
Table.where("column = ?", "; INJECTION")
如果你想重复使用这些组合并且没有那么多,你可以将这些组合硬编码到几个不同的范围内(减少对args的需求,这可能会导致排序混乱等。)