Rails 4 Active Record 2不同关系相同的型号范围

时间:2014-10-22 19:12:15

标签: mysql ruby-on-rails activerecord ruby-on-rails-4 squeel

我有这些模特:

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中使用。

0 个答案:

没有答案