User.where(:id => [1,2])。where(:id => 2).arel.to_sql意外结果

时间:2011-03-15 21:40:11

标签: ruby-on-rails-3 activerecord arel active-relation

从rails控制台,运行以下命令会产生意外结果:

User.where(:id => [1,2]).where(:id => 2).arel.to_sql
 => "SELECT `users`.* FROM `users` WHERE (`users`.`id` IN (1, 2) OR `users`.`id` = 2)"

我不希望这是OR

这个例子是我所定义的无表格User模型的一个非常简化的例子:

def cars
  Car.where(:id => list_of_users_car_ids_not_from_the_database)
end

其中Cars保存在数据库中。然后在控制器中

current_user.cars.find(params[:id])

(好吧,这也是一个简化的例子,但更能代表我想要完成的事情)

1 个答案:

答案 0 :(得分:1)

这些消息来源说它在3.0.3和3.0.4之间爆发,但他们已经将其修复为3.0.5。

http://www.ruby-forum.com/topic/1089054#new

http://groups.google.com/group/rubyonrails-core/browse_thread/thread/407f746fd1de6636

他们故意“打破”它(他们正在修复一个错误并认为新行为更好)。不过,它应该在3.0.5中恢复。