0

私はこれらのモデルを持っています:

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 で可能かどうかを知りたいです。

4

0 に答える 0