Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails “活动记录范围”;“违约”;结果_Ruby On Rails_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails “活动记录范围”;“违约”;结果

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,除非指向#如何在此处

假设我想检查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,除非指向#如何在此处返回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)
}