2

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

class Document1
  field privacy
  has_many events, :as => :target
end

class Document2
  field privacy
  has many_events, :as => :target
end

class Event
  belongs_to :target, :polymorphic => true
end

私は次のようなことをする必要があります:

Event.where( :target.privacy => :public )

どうすればできますか?

4

2 に答える 2

4

Mongodb のリレーション テーブルからフィールドをクエリすることはできません。Mongodb には結合の概念がありません。belongs_toまた、 aではなく aを使用しているため、ドット表記は機能しませんembedded_in。ここにはいくつかのオプションがあります。スキーマを変更して埋め込みリレーションを使用するか、次のように 3 つの個別のクエリでこれを行うことができます。

ids = Document1.where(privacy: :public).pluck(:id) + Document2.where(privacy: :public).pluck(:id)
Event.where(target_id: ids).to_a

私のアドバイスは、スキーマを見直して、埋め込まれたリレーションをより有効に活用することですが、それはユース ケースによって異なります。

于 2013-09-16T15:31:55.583 に答える