Многочисленные «имеющие» пункты взрывают Rails 3 / Arel - PullRequest
4 голосов
/ 28 ноября 2010

Мне кажется, я нашел ошибку в 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 являются граничными версиями с ревизиями, перечисленными в приведенной выше ошибке.

Ответы [ 2 ]

2 голосов
/ 22 марта 2011

После всестороннего тестирования это похоже на ошибку Rails, хотя я не смог подтвердить это. Эта проблема возникает и в минимальном тестовом приложении Rails.

2 голосов
/ 30 ноября 2010

Иногда Arel выдает похожую ошибку, когда операторы области видимости не в SQL-подобном порядке, например, пытаются вызвать select ("..") перед тем, как иметь. Кроме того, я не уверен, что в таких запросах допускается множественное наличие, поэтому попробуйте q = q.having (['(option_sum>? AND option_sum <?)', 5, 10]) </p>

...