複数の ‘having’句がRails 3 / Arelを爆破する

arel ruby-on-rails ruby-on-rails-3 sql
複数の ‘having’句がRails 3 / Arelを爆破する

Rails 3 / Arelでバグを見つけたと思いますが、修正してバグレポートを送信する前に、誰かが私の問題を明確にしてくれることを望んでいます。

  • Questionモデルを使用した非常にシンプルなアプリ:(submitter_id:integer、
    option_count:整数)

私が使用しているコード:

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  1


ベストアンサー

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

2


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

2


タイトルとURLをコピーしました