4

我想我在 Rails 3 / Arel 中发现了一个错误,但我希望有人能在我尝试修复它和/或提交错误报告之前澄清我的问题。

  • 在一个非常简单的应用程序上,带有一个 Question 模型:(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 是边缘版本,上面的错误中列出了修订版。

4

2 回答 2

2

有时 Arel 会给出类似的错误,当范围运算符不是类似 SQL 的顺序时,例如尝试在 haves 之前调用 select("..")。另外,我不确定在这样的请求中是否允许多个拥有,所以尝试 q = q.having(['(option_sum > ? AND option_sum < ?)', 5, 10])

于 2010-11-29T23:25:35.967 回答
2

经过广泛的测试,这毕竟看起来像一个 Rails 错误,尽管我无法确认它。这个问题也发生在最小的测试 Rails 应用程序上。

于 2011-03-22T13:33:13.157 回答