Open remotelocal opened 9 years ago
8.1 unscope unscopeを使用して特定の条件を取り除くことができます。例:
Post.where('id > 10').limit(20).order('id asc').except(:order) 上で実行されるSQLは以下のようなものになります。
SELECT * FROM posts WHERE id > 10 LIMIT 20
unscope
する前のオリジナルのクエリSELECT * FROM posts WHERE id > 10 ORDER BY id asc LIMIT 20 特定のwhere句でunscopeを指定することもできます。例:
Post.where(id: 10, trashed: false).unscope(where: :id)
unscopeをリレーションに適用すると、それにマージされるすべてのリレーションにも影響します。
Post.order('id asc').merge(Post.unscope(:order))
ActiveRecord::Base.lock_optimistically = falseを設定するとこの動作をオフにできます。
ActiveRecord::Baseには、lock_versionカラム名を上書きするためのlocking_columnが用意されています。
class Client < ActiveRecord::Base self.locking_column = :lock_client_column end
すべてActiveRecord::Relationのインスタンスを返します