gpt4 book ai didi

sql - 多个 'having' 子句炸毁了 Rails 3/Arel

转载 作者:行者123 更新时间:2023-12-01 01:31:50 25 4
gpt4 key购买 nike

我想我在 Rails 3/Arel 中发现了一个错误,但我希望有人能在我尝试修复它和/或提交错误报告之前澄清我的问题。

  • 在一个非常简单的应用程序上,有一个问题模型:(submitter_id: integer, option_count: integer)

  • 我正在使用的代码:
    q = Question.where(:submitter_id => 1)
    q = q.having(['option_sum > ?', 5])
    q = q.having(['option_sum < ?', 10])
    q = q.select("#{Question.table_name}.*, MAX(#{Question.table_name}.option_count) AS option_sum")
    q.to_sql
    q

    这爆炸了:
    ArgumentError: wrong number of arguments (2 for 1)
    from ~/.rvm/gems/ruby-1.9.2-p0/bundler/gems/arel-f092ae544f58/lib/arel/select_manager.rb:94:in `having'
    from ~/.rvm/gems/ruby-1.9.2-p0/bundler/gems/rails-76053fe4d12b/activerecord/lib/active_record/relation/query_methods.rb:193:in `build_arel'
    from ~/.rvm/gems/ruby-1.9.2-p0/bundler/gems/rails-76053fe4d12b/activerecord/lib/active_record/relation/query_methods.rb:162:in `arel'

    去掉其中一个“have”子句可以解决问题,并生成正确的 SQL。

    任何意见将不胜感激。 Arel 和 Rails 3 是边缘版本,上面的错误中列出了修订版。

    最佳答案

    有时 Arel 会给出类似的错误,当作用域操作符不是类似 SQL 的顺序时,例如尝试在 hass 之前调用 select("..") 。另外,我不确定在这样的请求中是否允许多个拥有,所以尝试
    q = q.have(['(option_sum > ? AND option_sum < ?)', 5, 10])

    关于sql - 多个 'having' 子句炸毁了 Rails 3/Arel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4295974/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com