2012-11-10 2 views
2

3 모델 레일에 :사용자 지정 쿼리 3.2

내가 index 행동에 products_controller.rb 내부에 필요
Class Product 
include Mongoid::Document 
has_many :orders, dependent: :destroy, :autosave => true 
#search 
searchable do 
    text :title, :description, :boost => 2.0 
    time :created_at 
end 
end 

Class Order 
include Mongoid::Document 
belongs_to :product 
has_one :dispute, dependent: :destroy, :autosave => true 
end 

Class Dispute 
include Mongoid::Document 
belongs_to :order 
field :buyer_has_requested_refund, :type => Boolean, :default => "false" 
end 

, 낮은 종류 높은 순서로 모든 제품을 얻고있다 buyer_has_requested_refund = true

뭔가와 분쟁 좋아요 :

고마워요!

+0

이러한 모델의 인덱싱을 위해 Searchable Block을 추가 한 모델입니다. – Sreehari

+0

모델'Product.rb'에서. 질문을 편집하고 검색 가능한 블록을 추가했습니다. 대단히 감사합니다! – hyperrjas

답변

0

당신은 인덱스로 검색을 정렬하는 데 필요한 정보를 SOLR를 말해야한다 :

class Product 
include Mongoid::Document 
has_many :orders, dependent: :destroy, :autosave => true 
has_many :disputes, :through => :orders 
#search 
searchable do 
    text :title, :description, :boost => 2.0 
    integer :disputes_where_buyer_has_requested_refund { |product| product.disputes.where(:buyer_has_requested_refund => true).size } 
    time :created_at 
end 
end 

새로운 분쟁을 만들 때/파괴 따라 인덱스의 레코드 값을 다시 인덱스 알고 있어야합니다. after_create/after_destroy를 지연된 작업에서 훅하거나 필요에 따라 색인을 다시 생성하여 하루에 한 번 색인을 생성 할 수도 있습니다.

관련 문제