我有2个命名范围:
scope :by_calls, -> {where.not(call_id: nil)}
scope :by_meetings, -> {where.not(meeting_id: nil)}
将来,我会添加更多类型,例如by_events,by_emails等,并尝试按其中的一个或多个进行过滤
有没有办法通过OR
轻松链接这些范围答案 0 :(得分:0)
使用Arel:
model = Model.arel_table
model.where(model[:call_id].eq(nil)).or(model[:meeting_id].eq(nil))
只需将Model
更改为包含这些范围的模型的名称。
答案 1 :(得分: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)
}
因此我现在可以检查给定列数组中的nil