Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.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

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 轨道4-如果条件允许,则不包括范围_Ruby On Rails_Ruby On Rails 4_Scope - Fatal编程技术网

Ruby on rails 轨道4-如果条件允许,则不包括范围

Ruby on rails 轨道4-如果条件允许,则不包括范围,ruby-on-rails,ruby-on-rails-4,scope,Ruby On Rails,Ruby On Rails 4,Scope,我想创建一个带有一些条件的作用域,其中一个返回的不是特定的作用域。就目前而言,此解决方案有效: scope :my_scope, ->(my_var) { scope = where('TRUE') if my_var.condition1? scope = scope.where({ :some_condition => :some_value }) end if my_var.condition2? scope = scope.where({

我想创建一个带有一些条件的作用域,其中一个返回的不是特定的作用域。就目前而言,此解决方案有效:

scope :my_scope, ->(my_var) {
  scope = where('TRUE')
  if my_var.condition1?
     scope = scope.where({ :some_condition => :some_value })
  end
  if my_var.condition2?
     scope = scope.where({ :some_condition => :some_value })
  end
  scope 
}
有没有其他更好的解决办法


关于Rails 4中的,您可以简单地使用
all

scope :my_scope, ->(my_var) {
  if my_var.condition?
    where(some_condition: :some_value)
  else
    all
  end
end

我很确定你可以安全地省略where之前的
。我在代码中使用了相同的解决方案,效果很好。考虑给出一个不太通用的答案来得到一个深入的答案。@ MichalSzyndel固定。是的,但是我的问题是关于代码> MyAva< /Cord>,你检查什么样的条件?根据具体情况,您可能会以不同的方式处理此问题。正如我所说的,我自己使用范围内的条件,但我不认为这是一个很好的实践。难道<代码>所有< /代码>都加载我的AR对象吗?例如:<代码>模型。CuulySistar。我有几个像这样链接的作用域。
Model.all.custom\u scope
=
Model.custom\u scope.all
。由于Rails 4,这不是一个问题(因为在Rails 4中,
all
返回
ActiveRecord::Relation
,而不是
Array
)。