2017-10-18 28 views
0

我试图让所有transactionspostgresql db,transactionspairs表有一对一的关系。在pair表中,有一个名为match的列,其类型为json。我想选择所有transactions,包括他们的pair,其pair.match计数大于1.在rails中的JSON对象大小包括

我试过pairs = Pair.where('json_array_length(match) > 1')哪个工作。

我如何获得pair.match大于1的所有交易。试过这个 - >transactions = Transactions.includes(:pair).where(pairs: 'json_array_length(match) > 1'),但没有奏效。

更新:这是TransactionTransactions

回答

1

您可以尝试连接两个表。假设你的模型是对和交易

transactions = Transaction.joins(:pair).where('json_array_length(match) > 1') 
+0

如果我有100万次交易和100万次交易,这会慢吗? –

+1

我无法想象任何快捷方式。这是两个表格之间的简单连接。我同意Michael Chaney的观点。您应该采纳所有建议的更改以避免将来出现任何问题。 – geoandri

2

一对夫妇的意见:

  1. 的模式应该是“事务”(单数)
  2. 你真的是在和自己的伤害的世界通过命名它“交易”。这基本上是一个“保留字”。你不想使用它。您将与其他已存在称为“交易”或“交易”的方法发生冲突
  3. 与具有称为“匹配”的列相同。这是Ruby中一个非常常见的方法名称。

我知道我没有回答这个问题,但是这对于评论来说太多了,你需要在继续之前解决这些问题。

+0

我输入时犯了一个错误。它是'交易' –

+1

您应该避免在rails中使用更多“受保护”的词语:https://stackoverflow.com/a/22287497 –

+0

@larrybuntus您不想使用“Transaction”,无论是单数还是复数。你会遇到奇怪的问题 - 只需更改该表/模型的名称即可。 –