remotelocal / web

0 stars 0 forks source link

Active Record クエリインタフェース #64

Open remotelocal opened 9 years ago

remotelocal commented 9 years ago

すべてActiveRecord::Relationのインスタンスを返します

remotelocal commented 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)

SELECT "posts".* FROM "posts" WHERE trashed = 0

unscopeをリレーションに適用すると、それにマージされるすべてのリレーションにも影響します。

Post.order('id asc').merge(Post.unscope(:order))

SELECT "posts".* FROM "posts"

remotelocal commented 9 years ago

ActiveRecord::Base.lock_optimistically = falseを設定するとこの動作をオフにできます。

ActiveRecord::Baseには、lock_versionカラム名を上書きするためのlocking_columnが用意されています。

class Client < ActiveRecord::Base self.locking_column = :lock_client_column end