4

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'

「having」句の 1 つを削除すると、問題が修正され、適切な SQL が生成されます。

コメントをいただければ幸いです。Arel と Rails 3 はエッジ バージョンであり、上記のエラーに記載されているリビジョンがあります。

4

2 に答える 2

2

徹底的なテストの結果、これはRailsのバグのように見えますが、確認することはできませんでした。この問題は、最小限のテストRailsアプリでも発生します。

于 2011-03-22T13:33:13.157 に答える
2

スコープ演算子が SQL のような順序になっていない場合、たとえば、having の前に select("..") を呼び出そうとすると、Arel が同様のエラーを出すことがあります。また、そのようなリクエストで複数のhavingが許可されているかどうかわからないので、 q = q.having(['(option_sum > ? AND option_sum < ?)', 5, 10]) を試してください

于 2010-11-29T23:25:35.967 に答える