2010-11-28 11 views
4

Rails 3/Arelにバグが見つかりましたが、誰かが私の問題を明確にしてから修正したり、報告する。 (submitter_id:整数、option_count:整数) 複数の 'having'句が吹き飛ばされるRails 3/Arel

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

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 

これが吹くまで質問モデルと非常にシンプルなアプリ、オン

  • with:

    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はエッジバージョンであり、上記のエラーのリビジョンが記載されています。

+0

これは灯台のバグとしては最適ではないでしょうか? (テストの結果) –

+0

Brady、この問題に対する満足のいく答えを見つけましたか?私はまだそれに走っていて、メソッドを持つメソッドに結合することは、私の状況でひどく役立つものではありません。 – Andrew

+1

申し訳ありません、Andrew、いいえ。しかし、GearHeadのソリューションは私のために働いた – bouchard

答えて

2

私はそれを確認することができませんでしたが、これはRailsのバグのように見えます。この問題は最小のテストRailsアプリケーションでも発生します。

2

時々、Arelは、スコープ演算子がSQLのような順序でないときに、同様のエラーを返します。たとえば、前にselect( "..")を呼び出してみてください。また、そのような要求には複数の持ち物が許可されているとは確信していませんので、 q = q.having(['(option_sum>?AND option_sum <?)'、5,10])

+0

ありがとうギアヘッド、複数のHAVINGsは間違いなくスペックで許されています、そして、Rails 3のソースはそれが許されるべきであるように見えます(コードの特定の部分は '+ = 'アレイ)。あるいは、あなたが書いたように、複数のhavings呼び出しを1つにマージする良い方法はありますか?これらはプログラムによって生成されるので、あなたが持っている方法で書くことはできません。 – bouchard

+0

.havingを呼び出す前に.selectと.groupを呼び出そうとしましたか? Arelスコープは状態制御されています。たとえば、一部のDBドライバで.offsetの前に.offsetを呼び出すことはできません。 – sandrew

+1

また、私が見ているように、もっとも簡単な方法は、次の条件を文字列に追加し、配列の最後にパラメータを追加することです。['field_1>?'、x1] - > ['field_1>? AND field_2 <? '、x1、x2] - > [' field_1>? AND field_2 <? AND field_3 =? '、x1、x2、x3]などである。 1つしか持っていない – sandrew

関連する問題