【问题标题】:JSON object size in rails includesRails 中的 JSON 对象大小包括
【发布时间】:2017-10-18 12:24:09
【问题描述】:

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

我尝试了pairs = Pair.where('json_array_length(match) > 1'),它奏效了。

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

更新:这是Transaction 而不是Transactions

【问题讨论】:

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


    【解决方案1】:

    几个观察:

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

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

    【讨论】:

    • 我输入错误。这是Transaction
    • 在 Rails 中应该避免的更多“受保护”字词:stackoverflow.com/a/22287497
    • @larrybuntus 无论是单数还是复数,您都不想使用“交易”。您会遇到奇怪的问题 - 只需更改该表/模型的名称即可。
    【解决方案2】:

    您可以尝试连接这两个表。假设你的模型是 Pair 和 Transaction

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

    【讨论】:

    • 如果我有 100 万笔交易和 100 万对,这会不会很慢?
    • 我想不出任何捷径。这是两个表之间的简单连接。不过,我同意迈克尔·钱尼的观察。您应该采纳所有建议的更改以避免将来出现任何问题。
    猜你喜欢
    • 1970-01-01
    • 2013-05-28
    • 2021-01-11
    • 2010-12-05
    • 2011-01-20
    • 2011-10-09
    • 2011-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多