0

ユーザー モデル内の 2 つの関係を 1 つの関係にマージしたい

次のデータベース設定があります。

class User < ActiveRecord::Base
  has_many :shared_cards
  has_many :card_instances
  has_many :shared_card_instances, through: :shared_cards, source: :card_instances
end

class CardInstance < ActiveRecord::Base
  belongs_to :user
  belongs_to :shared_card
end

class SharedCard < ActiveRecord::Base
  belongs_to :user
  has_many :card_instances
end

users テーブルの「card_instances」と「shared_card_instances」をマージして、「all_card_instances」の例を作成したい

それらをマージしたい理由は、ActiveRecord::Relation を取得して、すべてのオブジェクトを直接検索およびソートできるようにするためです。

編集:

私の現在のやり方:

all_card_instances = CardInstance.find_by_id(user.card_instances.pluck(:id) | user.shared_card_instances.pluck(:id))

これで、返された ActiveRecord::Relation オブジェクトで '.order' と pg_search_scope を直接呼び出すことができます

しかし、この方法では、最初に 2 つのソースからすべてのオブジェクトを取得し、次にマージされたクエリでそれらすべてを再度取​​得するという不必要なクエリが実行されると思います。

4

0 に答える 0