1

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

(わかりました、これも単純化された例ですが、私が達成しようとしていることをはるかに表しています)

4

1 に答える 1

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で元に戻す必要があります。

于 2011-03-15T22:23:33.883 に答える