@people = People.scoped
@people = @people.where(...) if ...
@people = @people.where(...) if ...
@people = @people.where(...) if ...
@people = @people.where(...) if ...
是任何Ruby现有的解决方案
@people = People.scoped
@people.???? do
where(...) if ...
where(...) if ...
where(...) if ...
end
附言:谢谢你的回答。但你提供的解决方案看起来
def self.conditional_scope
where(...) if ...
where(...) if ...
where(...) if ...
end
我想即使所有的“如果”都是真的,我也只能在最后一个地方。
我说得对吗?
最佳答案
如果我理解你在问什么,如果条件存在,你只想应用每个范围。可以将命名作用域与lambda一起使用,然后将它们链接起来:
scope :one, lambda {|condition| condition ? where(...) : {}}
scope :two, lambda {|condition| condition ? where(...) : {}}
...
@people = Person.one(true).two(false)
关于ruby-on-rails - 帮我重构ruby下一个代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7011631/