2016-11-18 1 views
3

Использования рельсов 4.отчетов, где логические верны для каждого элемента массива - рельсам 4

У меня есть Spot модели с 7 булевыми атрибутами для каждого дня недели: monday:boolean, tuesday:boolean, wednesday: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)

Делает что-то подобное возможно? Есть ли лучший способ? Возможно, я собираюсь сделать это неправильно. Спасибо за любую помощь/предложения.

Update (Андрей) ... 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> 
+0

, какая база данных сделать вас использовать? –

+0

sqlite3 @Andrey – Kathan

+0

Пожалуйста, покажите нам примерный экземпляр модели 'Spot', например' Spot.first' –

ответ

0

Используя ваш range_array, вы должны быть в состоянии сделать запрос следующим образом:

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

Spot.where(query) 
+0

Спасибо за это .. попробуем сейчас @Jagdeep – Kathan