Почему бы вам не написать свое состояние, используя один where
вызов, такой как:
Flag.joins(:flag_histories)
.where(
"external_organization_id = :org_id AND
(start_active <= :date AND end_active >= :date
OR start_active <= :date AND end_active IS NULL)",
{ date: date, org_id: org_id }
).group('flags.id')
или:
Flag.joins(:flag_histories)
.where(external_organization_id: org_id)
.where(
"start_active <= :date AND end_active >= :date
OR start_active <= :date AND end_active IS NULL",
{ date: date }
).group('flags.id')
(я предполагаю, что каждый из * 1008Поля *, start_active
и end_active
присутствуют либо в таблицах flags
, либо flag_histories
, но не в обеих, иначе в условии, что к ним необходимо добавить правильное имя таблицы)
ОБНОВЛЕНИЕ :
Я никогда раньше не использовал метод or
, но как документация говорит, что он имеет некоторые особенности и не может использоваться так же, как where
,Вместо условия у него должен быть другой Relation
в качестве аргумента:
# File activerecord/lib/active_record/relation/query_methods.rb, line 622
def or(other)
unless other.is_a? Relation
raise ArgumentError, "You have passed #{other.class.name} object to #or. Pass an ActiveRecord::Relation object instead."
end
spawn.or!(other)
end