ユーザー モデル内の 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 つのソースからすべてのオブジェクトを取得し、次にマージされたクエリでそれらすべてを再度取得するという不必要なクエリが実行されると思います。