1

User、Product、および Purchase の 3 つのモデル クラスがあります。Purchase は、注文する製品の数量を記述します。したがって、購入には 1 つの製品があり、製品は複数の購入に属する場合があります。しかし、問題に関する Mongoid メッセージ:

Mongoid::Errors::InverseNotFound (
Problem:
  When adding a(n) Product to Purchase#product, Mongoid could not determine the inverse foreign key to set. The attempted key was 'purchase_id'.
Summary:
  When adding a document to a relation, Mongoid attempts to link the newly added document to the base of the relation in memory, as well as set the foreign key to link them on the database side. In this case Mongoid could not determine what the inverse foreign key was.
Resolution:
  If an inverse is not required, like a belongs_to or has_and_belongs_to_many, ensure that :inverse_of => nil is set on the relation. If the inverse is needed, most likely the inverse cannot be figured out from the names of the relations and you will need to explicitly tell Mongoid on the relation what the inverse is.

 Example:
   class Lush
     include Mongoid::Document
     has_one :whiskey, class_name: "Drink", inverse_of: :alcoholic
   end

   class Drink
     include Mongoid::Document
     belongs_to :alcoholic, class_name: "Lush", inverse_of: :whiskey
   end):

しかし、モンゴイドの例は私の場合をカバーしていません。

これは私のモデルです:

class Purchase
  include Mongoid::Document

  field :quantity, text: String
  has_one :product
  belongs_to :user
end

class Product
  include Mongoid::Document
  belongs_to :purchases
end

class User
  include Mongoid::Document

  has_many :purchases
end

関係を正しく説明するにはどうすればよいですか?

4

2 に答える 2

1

@Ajcodezは、あなたの関係が後退していたことは正しいです。ただし、実際に belongs_to_many 関係 (関係の片側にのみ ID を格納する HABTM) を探している場合は、次の方法で実装できます。

has_and_belongs_to_many :name, inverse_of: nil

参照: https://github.com/mongoid/mongoid/issues/2473

于 2013-10-09T22:27:31.823 に答える
0

後ろ向きな関係だと思います。Purchase各ドキュメントには、製品の ID、つまり製品にPurchase属している ID が含まれている必要があります。したがって、Product多くの購入があります。

を書くたびbelongs_toに、親の ID がドキュメントに入ることを忘れないでください。あなたは本当にできませんbelong_to <plural>

于 2013-03-21T13:43:23.033 に答える