Проблема исправлена ... Оказалось, что активный метод записи был перезаписан, теперь все работает как положено
Я пытаюсь настроить области, чтобы я мог сделать вызов, похожий на
Competitor.of_type(type).at_event(event)
, который вернет всех участников типа, которые посетили мероприятие
Мои модели выглядят примерно как
class Competitor < Competitor
belongs_to :type
has_and_belongs_to_many :events
scope :at_event, ->(event) {where(:event_ids.in => event.competitor_ids)}
scope :of_type, ->(type) where(:type_id => type.id)
end
Следующие работы (критерии возврата mongoid)
Competitor.of_type(type)
Competitor.at_event(event)
Но когда я их цепью, он печатает что-то вроде этого:
#<Competitor:0x00000109e2b210>
#<Competitor:0x00000109e2ab08>
-------=-=------------------------------------
=> #<Mongoid::Criteria
selector: {},
options: {},
class: Competitor,
embedded: false>
Для каждого типа Competitor.of_type (type) (первого связанного критерия) существует запись о конкурентах, и если я запускаю .count для запроса, я получаю общее количество конкурентов в базе данных.
В верхней части документации mongoid для областей указано, что все области являются цепочечными и могут применяться также к ассоциациям, что позже обсуждается в разделе отношений.
К сожалению, я не видел подраздела отношений, не смог найти ни одной ссылки на область действия в разделе основных отношений.
Мне удалось получить следующее, чтобы вернуть желаемые результаты:
where(:id.in => event.competitor_ids).where(:type_id => type.id)
, но если какая-либо часть запроса разделяется на отдельный метод или область действия, она завершается неудачно и дает результат, который я показал выше.