Можете ли вы помочь нам понять вашу структуру данных немного больше? Чего вы пытаетесь достичь с помощью двух отношений (has_many / own_to и HABTM), которых вы не можете достичь с помощью HABTM или has_many,: through? Мне кажется, что упрощение вашей модели данных, вероятно, даст результаты, к которым вы стремитесь.
(извините - недостаточно очков или добавили бы в качестве комментария)
- ОБНОВЛЕНО ПОСЛЕ КОММЕНТАРИИ
Я думаю, что то, что вы предложили в своем комментарии, является бесконечно лучшим решением. возможно сделать так, как вы начали его реализовывать, но это неоправданно сложно - и по моему опыту вы часто можете сказать, когда вы идете по неверному пути с ActiveRecord, когда начинаете испытывать сложные и повторяющиеся имена отношений.
Почему бы и нет
а) иметь все в has_many, через отношения (в обоих направлениях)
б) иметь дополнительное поле в таблице соединений, чтобы указать, что это основное / основное вложение (или наоборот).
Затем вы можете назначить именованные области в модели событий для общих событий и т. Д., Которые делают чудо, включив условие в указанное соединение. Это дает вам:
@calendar.events #returns all events across the join
@calendar.shared_events #where the 'shared' flag on the join is set
@calendar.main_events #without the flag