记录数组的每个元素的布尔值为true - Rails 4

时间:2016-11-18 06:32:01

标签: ruby-on-rails ruby ruby-on-rails-4 model where

使用rails 4.

我有一个Spot模型,每周的每一天都有7个布尔属性:monday:booleantuesday:booleanwednesday:boolean等。

用户应该能够选择日期范围,并且只返回那些日期可用的地点。

目前无法设置找到正确记录的类方法。

到目前为止,我正在创建一个用户输入日期的范围,该范围返回该范围内一周中的所有日期。

range_array = (start_date..end_date).to_a.map{ |date| date.strftime("%A").downcase }
=> ["wednesday", "thursday", "friday"]

这就是我陷入困境的地方。我试图找到与数组中的元素对应的布尔字段为true的所有点。因此,在上面的示例中,我想形成此查询Spot.where(wednesday: true, thursday: true, friday: true)

这样做可能吗?有更好/不同的方式吗?也许我错了。感谢您的任何帮助/建议。

更新(对于Andrey)... Spot.first示例实例:

=> #<Spot id: 18, address: "4640 east skyline", title: "iodjiojoidj", description: "<p>jijiojfojewoif</p>\r\n", 
created_at: "2016-03-30 04:54:07", 
updated_at: "2016-09-26 05:39:51", 
user_id: 13, timezone: nil, 
surge_pricing: nil, free: nil, monday: true, 
tuesday: true, wednesday: true, thursday: false, 
friday: false, saturday: false, sunday: false> 

1 个答案:

答案 0 :(得分:0)

使用range_array,您应该能够按照以下方式进行查询:

query = range_array.inject({}) do |h, e|
          h[e] = true
          h
        end

Spot.where(query)