1

次のモデルを想定します。

class Product 
 include MongoMapper::Document

 key :name, String
 key :product_category_id, ObjectId

 belongs_to :product_category
end

class ProductCategory
 include MongoMapper::Document

 key :name, String, :required => true, :unique => true

 timestamps!
 userstamps!
end

モデル内のすべての値を検査する高度な検索を実装したいと思います。これには、次のようなすべての関連付けが含まれます。

  • 製品「aLaptop」という名前のデータbelongs_to:ProductCategoryという名前の「Notebook」。
  • 「aGreatNotebook」という名前の製品Bデータbelongs_to:ProductCategoryという名前の「Notebook」。

「Notebook」という名前のキーワードで検索する場合、Product.nameフィールドと、ProductCategory.nameを意味するその関連付けも検索したいと思います。つまり、ProductAにはProductCategory.name"Notebook"があり、ProductBにはProduct.name"aGreatNotebook"とProductCategory"Notebook"があるため、両方のアイテムが返されます。

これどうやってするの??私はすでに2日間検索しましたが、今まで成功していません:( .. MySQLの場合、結合テーブルを使用しました。..しかし、MongoMapperではどうですか??

助けてください..ありがとう..

4

2 に答える 2

0

MongoDBでは結合を行うことはできません。したがって、基本的な考え方は、「Notebook」カテゴリに関連付けられたObjectIdを取得してから、product_categoryがnotebook_idと等しい製品をクエリすることです。これには通常、2つのクエリが含まれます。したがって、これは次のようになります。

notebook_id = ProductCategory.first(:name => "Notebook")
if notebook_id
  Product.where({:product_category_id => notebook_id['_id']})
end
于 2012-05-09T15:23:57.127 に答える
0

質問は紛らわしいですが、質問のタイトルは明確です。

したがって、誰かがここに来て、すべてを取得する方法を確認したい場合:

  • キー
  • 協会

読む...

モデルのキーを取得するには:

ConfinedSpace.keys.keys
 => ["_id", "photo_ids", "include_in_qap", "position", "created_at", "updated_at",
     "structure_id", "identifier", "name", "description", "notes", "entry_info", 
     "anchor_points", "nature", "special_equipment", "rescue_overview"] 

そして、関連付けを取得するには:

ConfinedSpace.associations.each{|name,assoc| puts name}
photos
attachments
activities
structure
videos

そしてクラス(簡潔にするために編集):

class ConfinedSpace
  include MongoMapper::EmbeddedDocument
  include Shared::HasPhotos
  include Shared::HasAttachments
  include HasActivities

  TAG = "ConfinedSpace"

  belongs_to :structure
  many :videos, :as => :attachable

  key :identifier, String
  key :name, String
  key :description, String
  key :notes, String
  key :entry_info, String
  key :anchor_points, String
  key :nature, String
  key :special_equipment, String
  key :rescue_overview, String

  validates :identifier, presence: true

end
于 2019-12-18T01:28:15.303 に答える