【问题标题】:Records where boolean true for each element of array - Rails 4记录数组的每个元素的布尔值为真 - Rails 4
【发布时间】:2017-04-01 22:17:09
【问题描述】:

使用导轨 4.

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

用户应该能够选择一个日期范围,并且只返回那些日子可用的位置。

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

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

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

这就是我卡住的地方。我试图找到与数组中的元素对应的布尔字段为真的所有点。所以在上面的例子中,我想形成这个查询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> 

【问题讨论】:

  • 你使用哪个数据库?
  • sqlite3 @Andrey
  • 请向我们展示Spot模型的示例实例,例如Spot.first
  • 已更新,让我知道这是否有效@Andrey

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


【解决方案1】:

使用您的range_array,您应该能够进行如下查询:

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

Spot.where(query)

【讨论】:

  • 谢谢你..现在试试@Jagdeep
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
  • 1970-01-01
  • 2012-07-28
  • 2013-09-09
  • 2014-04-25
  • 1970-01-01
  • 2011-02-27
相关资源
最近更新 更多