我有这些模特:
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 =&#39; drive&#39;或person.skill.name =&#39; drive&#39;
起初看起来很容易,但事实并非如此:
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没有&#39; union&#39;声明,我已经看到了一些方法来实现它,但我不知道它是否会变得过于复杂和黑客。
有什么想法吗?
感谢。
编辑:
到目前为止,我使用squeel where{(martian.skill.eq skill_name)|(people.skills.eq skill_name)}
解决了问题,但我想知道它是否可以在普通AR中使用。