Rails 4 Active Record 2 разные отношения одна и та же модель области
У меня есть эти модели:
SpaceShip < ActiveRecord::Base
has_one :martian
has_many :people
Person < ActiveRecord::Base
has_many :skills
Martian < ActiveRecord::Base
belongs_to :skill
Skill < ActiveRecord::Base
#rest omitted
Мне нужно иметь область, чтобы найти космический корабль, где martian.skill.name = 'drive' или person.skill.name = 'drive'
Сначала это кажется легким, но это не так:
Spaceship < ActiveRecord::Base
scope :by_skill_name, -> (skill_name){
joins([[people: :skills], [martian: :skill]])
.where('skills.name=?', skill_name)
}
Эта область не будет работать, потому что учитывает только связь martian.skill
,
Я попытался создать часть соединений в SQL и использовать псевдоним таблицы. Это работает, но в цепочке с другими областями я получаю ошибки SQL.
Я тоже пробовал с joins(...).merge(joins(...))
но я все еще получаю только последнее отношение.
У Active Record нет выражения 'union', я видел несколько способов его реализации, но я не знаю, будет ли он слишком сложным и хакерским.
Любая идея?
Благодарю.
РЕДАКТИРОВАТЬ:
Теперь я решил это с помощью Squeel where{(martian.skill.eq skill_name)|(people.skills.eq skill_name)}
но я хотел бы знать, возможно ли это в простом AR.