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
)。