Rails
scope
返回 all
(ActiveRecord::Relation
) 而不是 nil
。
这样我就可以在 condition
为 nil
时使用方法链。
class MyClass < ApplicationRecord
scope :my_filter, ->(condition) { where(condition: condition) if condition.present? }
end
MyClass.my_filter(condition).order(:date)
我想在Sequel中实现类似的功能,但是这段代码不能很好地工作,因为Sequel中的所有内容都返回一个数组。如何在 Sequel 中编写类似于 Rails 范围的功能?
class MyClass < Sequel::Model
datase_module do
def my_filter(condition)
return all if condition.nil?
where(condition: condition)
end
end
end
由于
where
返回 Dataset
我假设您也希望“all”返回相同的对象。
正如您所确定的,
all
将返回Array
;但是,您可以使用适当命名的 Dataset
方法来检索 dataset
。
所以我们应该能够将您的实现更改为:
class MyClass < Sequel::Model
datase_module do
def my_filter(condition)
return dataset if condition.nil?
where(condition: condition)
end
end
end