【问题标题】:User.where(:id => [1,2]).where(:id => 2).arel.to_sql unexpected resultUser.where(:id => [1,2]).where(:id => 2).arel.to_sql 意外结果
【发布时间】:2011-03-15 21:40:11
【问题描述】:

从 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])

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

【问题讨论】:

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


    【解决方案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 中恢复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-11
      • 2021-05-05
      • 1970-01-01
      • 1970-01-01
      • 2010-10-26
      • 2021-08-29
      • 2021-12-02
      相关资源
      最近更新 更多