6
在ActiveRecord中有一個default_scope
類方法來指定默認範圍。例如續集中的default_scope
class User < ActiveRecord::Base
default_scope where(:deleted => false)
end
User.all # => SELECT * FROM users WHERE deleted = 0;
我該怎麼做Sequel::Model
?
編輯:
一些google搜索後,我終於找到一些有用的信息。
class User < Sequel::Model
# Define some "scopes" (filters on the dataset)
dataset_module do
def existing
filter(deleted: false)
end
def active
filter(disabled: false)
end
end
# This is the equivalent to a default_scope. Set one of the datasets
# as the default dataset for this model.
set_dataset(self.active)
end
生成的查詢則是這樣的:
User.all # => SELECT * FROM `users` WHERE (`deleted` IS FALSE)
順便說:相當於unscoped
是unfiltered
:
User.unfiltered.all # => SELECT * FROM `users`
但,有一個問題。如果您嘗試更新從未過濾數據集獲得的用戶,它會嘗試使用給定數據集更新用戶。
User.create(disabled: true, deleted: true)
User.all # => []
u = User.unfiltered.first # => Given user
u.disabled = false
u.save # => UPDATE users SET ... WHERE (disabled IS FALSE AND id = 1)
# => Sequel::NoExistingObject: Attempt to update object did not result in a single row modification
所以我回到了開始。任何解決方法?