Мне кажется, я нашел ошибку в 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'
Устранение одного из предложений «Имея» устраняет проблему и генерирует правильный SQL.
Любые комментарии будут оценены. Arel и Rails 3 являются граничными версиями с ревизиями, перечисленными в приведенной выше ошибке.