Ruby on rails “活动记录范围”;“违约”;结果
假设我想检查ActiveRecord作用域中的nils:Ruby on rails “活动记录范围”;“违约”;结果,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,假设我想检查ActiveRecord作用域中的nils: class Person < ActiveRecord::Base scope :closest, ->(point) { return nil unless point # How can I return the ActiveSupport::Relation here? # other code goes below } end class-Person(点){ 返回nil,除非指向#如何在此处
class Person < ActiveRecord::Base
scope :closest, ->(point) {
return nil unless point # How can I return the ActiveSupport::Relation here?
# other code goes below
}
end
class-Person(点){
返回nil,除非指向#如何在此处返回ActiveSupport::关系?
#其他代码如下
}
结束
您可以将点
参数设置为可选参数。大概是这样的:
scope :closest, -> (point = '') {
where(point: point)
}
这样,作用域每次都将返回ActiveRecord::Relation
希望获得以下帮助:)您只需返回self即可返回默认范围:
class Person < ActiveRecord::Base
def self.closest(point = nil)
point.nil? ? self : where(point: point)
end
end
class-Person
编辑/解决方案
正如上面的评论所提到的,正如@Ahmaclod所指出的,all
是我们正在寻找的
scope :closest, ->(point) {
point.nil? ? all : where(point: point)
}
结束编辑
我想我已经找到了我要找的东西,而且它是无范围的
问题是,如果我将其链接,如果在之前的作用域之后使用,我将丢失它们。哪个字段应为nil?例如,如果point为nil,我希望返回Person.all。但是执行Person.all不允许灵活性,因为我可能想执行:Person.nestest(1)。where(name:“something”)我也不想执行。所有这些都是因为我不希望关系计算
all
不会重置范围。如果对该类调用,它将返回默认范围。如果调用关系,它将返回相同的关系。@Ahmaclod我认为你是对的;这就是我要找的。在Rails 4和Person.all.to_sql中,它似乎没有进行评估valid@Abdo,请编辑问题并在评论中添加详细信息。。这样,有相同问题的人可以更快地得到解决。谢谢=)我正在寻找一种返回“默认ActiveRecord::Relation”的方法。。。有什么线索吗?虽然这很有用,但当我这样做时:Person.where(name:'Abdo')。最近的
,结果是类型Person
。例如,我不能做。\u sql
。
scope :closest, ->(point) {
point.nil? ? unscoped : where(point: point)
}