@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/

10-14 16:00