1

Mongoid がどのようにソートを行っているかを理解しようとして、いくつかの問題が発生しています。私は Gig と Venue の 2 つのモデルを持っています。これらはどちらも、belong_to has_many 関係によって関連付けられています。

会場オブジェクトの属性「名前」でギグからオブジェクトを並べ替えようとしていますが、役に立ちません。

誰かが私を正しい方向に向けることができることを願っています。

以下は、切り捨てられたモデルの説明です。

私のクエリも以下です:

# Gig Model
class Gig 
  include Mongoid::Document
  include Mongoid::Paperclip
  include SearchMagic

  belongs_to :owner, :class_name => "User", :inverse_of => :owns
  belongs_to :venue

  has_and_belongs_to_many :attenders, :class_name => "User", :inverse_of => :attending

  has_and_belongs_to_many :artistes

<snip>
end

# Venue Model
class Venue
  include Mongoid::Document
  include Mongoid::Paperclip
  include SearchMagic

  has_many :gigs
  field :foursquare_id, type: String
  embeds_one :address
  embeds_many :user_ratings

  field :facebook, type: String
  field :twitter, type: String
  field :website, type: String
  field :name, type: String
  field :postal, type: String
  field :tel, type: String
  field :venue_type, type: String
  field :description, type: String
  field :rating, type: Float, default: 0.0

<snip>
end


# Console

>> Gig.desc('venue.name').map{|f| f.venue.name}                                            
=> ["*SCAPE", "Velvet Underground", "Blujaz Lounge", "Velvet Underground", "Home Club", "Wh
ite House, Emily Hill", "Zouk", "Zouk", "The Pigeonhole", "Home Club", "Home Club", "Home C
lub"]

# sorting doesn't work
4

1 に答える 1

0

モンゴには参加できません。結合が必要な場合は、リレーショナル データベースを使用してください。非リレーショナル データベースの「特徴」は、結合できないことです。

基本的に 2 つの選択肢があります。

  1. 会場の名前をギグに追加フィールドとして挿入する before_save コールバック (たとえば、https://github.com/rewritten/timebank/blob/master/lib/mongoid/denormalize.rbを参照)

  2. map-reduce タスク。会場またはギグを変更した後、追加フィールドとして会場名をギグに更新します。

最後に、それを並べ替えるには、Gig コレクションにフィールドが必要です。

于 2012-10-03T08:07:06.623 に答える