Ruby on rails 3 具有多个条件的Rails ActiveRecord作用域

Ruby on rails 3 具有多个条件的Rails ActiveRecord作用域,ruby-on-rails-3,activerecord,scope,Ruby On Rails 3,Activerecord,Scope,我有一个Rails应用程序,其中有一个单元模型和状态模型。状态有许多单元,单元属于状态 我在单元上写了一个作用域,以查找具有特定状态的所有单元,“正在使用”,如下所示: 这允许我调用Unit.in_service.count以获取所有正在使用的单元的计数 但我真正想做的是编写一个范围,允许我对所有状态为“在役”、“在岗”和“在站”的机组进行范围分析,以获得机组的准确视图,因为这两种状态都认为机组可用 我不知道怎么写这样的东西。其中范围包含多个条件或数据字段 有人能帮忙吗 更新 我尝试编写一个名为

我有一个Rails应用程序,其中有一个单元模型和状态模型。状态有许多单元,单元属于状态

我在单元上写了一个作用域,以查找具有特定状态的所有单元,“正在使用”,如下所示:

这允许我调用Unit.in_service.count以获取所有正在使用的单元的计数

但我真正想做的是编写一个范围,允许我对所有状态为“在役”、“在岗”和“在站”的机组进行范围分析,以获得机组的准确视图,因为这两种状态都认为机组可用

我不知道怎么写这样的东西。其中范围包含多个条件或数据字段

有人能帮忙吗

更新

我尝试编写一个名为available的类方法,如下所示:

  def self.available
    Unit.where(status_id: Status.find_by_unit_status("In Service").id)
    .where(status_id: Status.find_by_unit_status("At Post").id)
    .where(status_id: Status.find_by_unit_status("At Station").id)
  end

我不确定这个方法是否是我正在寻找的,因为我想找到每个状态的单位。我想我刚才写的可能是将方法限制在单元必须具有所有这些状态的位置。

这里有一些事情。首先,如果要查找状态为多个单元之一的所有单元,需要将其作为数组传递,如下所示:

scope :in_service, lambda { where(status_id: Status.where(unit_status: ["In Service", "At Post", "At Station"]).map(&:id))}

其次,在更新的方法示例中,您将一组
where
子句链接在一起,这将导致每个子句都与
连接起来

你说得对,我在用链子拴,但它没有正常工作。我没想到会将其作为数组传递。我只是试了一下,效果不错。现在我来复习一下代码,以便我能吸收/理解它。我感谢你的帮助。
scope :in_service, lambda { where(status_id: Status.where(unit_status: ["In Service", "At Post", "At Station"]).map(&:id))}