Я работаю в RoR 3..2.11. У меня 4 класса: человек, соглашение, отношения и роль. Моя ситуация выглядит следующим образом:Ruby on Rails - has_many отношения с условием, требующим присоединения
Это в лицо:
has_many :relationships
has_many :agreements, {
through: :relationships
}
has_many :current_agreements, {
source: :agreements,
through: :relationships,
conditions: "agreements.start_date <= NOW() AND agreements.end_date >= NOW()"
}
Это в отношениях:
belongs_to Role
Новая роль была добавлена в базу данных («Прошлое»), так что живые соглашения могут быть назначены другому лицу. Сот предыдущего человека по соглашению по-прежнему имеет отношение к соглашению, но больше не должен его подходить под текущие соглашения. Поэтому мне нужно учесть relationships.role.name. Что-то вроде этого:
has_many :current_agreements, {
source: :agreements,
through: :relationships,
conditions: "agreements.start_date <= NOW() AND agreements.end_date >= NOW() AND role.name != 'Past'"
}
Проблема здесь довольно четкая, роль не в запросе, так что роль.name терпит неудачу. Есть ли способ присоединиться к таблице ролей с помощью отношенийs.id для ассоциации?
Я думал о переопределении current_agreements как метода вместо этого, но проекту нужно, чтобы это была ассоциация в определенных местах, поэтому я бы скорее просто переопределил ассоциацию, а не перефакторировал все это.