2015-02-06 2 views
1

У меня 2 именованные группы:Rails: Комбинирование областей с OR вместо AND

scope :by_calls, -> {where.not(call_id: nil)} 
scope :by_meetings, -> {where.not(meeting_id: nil)} 

И в будущем, я буду добавлять больше типов, как by_events, by_emails и т.д., и пытаются фильтровать по одному или нескольким из них

есть ли способ, как я могу легко цепь этих областей от ИЛИ

ответ

0

Вот что я сделал:

scope :interaction_type_filter, lambda {|interaction_type| 
    allowed_values = ['call', 'meeting'] 
    return nil if interaction_type.blank? 
    sql_statement = interaction_type.first+'_id IS NOT NULL ' 
    interaction_type.shift 
    interaction_type.each do |type| 
     if allowed_values.include? type 
      sql_statement += 'OR '+type+'_id IS NOT NULL' 
     end 
    end 
    where(sql_statement) 
} 

Поэтому теперь я могу проверить ноль в массиве данных столбцов

0

Используйте Arel:

model = Model.arel_table 
model.where(model[:call_id].eq(nil)).or(model[:meeting_id].eq(nil)) 

Просто измените Model на название модели, содержащей эти области.

Смежные вопросы