Rails ActiveRecord范围具有多个条件

时间:2014-08-18 11:44:50

标签: ruby-on-rails-3 activerecord scope

我有一个Rails应用程序,我有一个单元模型和状态模型。状态has_many单位和单位belongs_to状态。

我在Unit上写了一个范围来查找具有特定状态的所有单元," In Service"像这样:

scope :in_service, lambda { where(status_id: Status.find_by_unit_status("In Service").id)}

这允许我调用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

我不确定这种方法是否是我正在寻找的方法,因为我想找到具有这些状态的单位。我认为我刚写的内容可能会限制该方法必须具备所有这些状态的方法。

1 个答案:

答案 0 :(得分:1)

你在这里发生了一些事情。首先,如果你想找到状态是其中之一的所有单位,你需要将其作为数组传递:

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

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