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.

0 ответов

Другие вопросы по тегам