2011-10-04 2 views
2

제품 모델, 카테고리 모델 및 product_categorization 모델 (연관을 통해 has_many ...)이 있습니다. 나는 제품 검색을 수행하기 위해 meta_search 보석을 사용하고 있습니다. 웬일인지, 비록 나의 로그가 정확한 criterias를 모으고 있지만, 그것은 카테고리에 기반하여 제품을 필터링하지 않고있다. 내가 무엇을 선택하든 항상 모든 제품을 표시합니다.rails - meta_search 결과가 올바르게 필터링되지 않습니다.

제품 컨트롤러 :

def update 
params[:product][:category_ids] ||= [] 
@product = Product.find(params[:id]) 
if @product.update_attributes(params[:product]) 
redirect_to @product 
else 
render "edit" 
end 

제품 검색 양식 : 어떤 도움을 주시면 감사하겠습니다

<div class="field"> 
    <%= f.label :category %> 
    <%= f.collection_select :product_categorizations_category_id_equals_any, Category.all, :id, :name, :include_blank => true, :prompt => "Select a category" %> 
    </div> 

. 또한 사용할 수있는 보석이 더 있습니까? searchlogic은 패치를 얻지 않으면 레일 3과 호환되지 않습니다. searchlogic의 패치 된 버전이 meta_search보다 더 나은 옵션입니까? 감사.

UPDATE : 해결 :

SOOO이 이상을 심사숙고의 몇 시간 후, 나는 그것을 알아 냈어. 이것이 설명 인 것은 확실하지 않지만 ": product_categorizations_category_id_equals_any"*에서 "any"를 삭제하면 * 작동하게됩니다. 그 이유는 이것이 연관을 통해 has_many이기 때문에 category_id는 배열로 저장되지 않으므로 "any"는 관련이 없다고 생각합니다. 내 설명은 완전히 꺼져 있지만 작동합니다.

답변

1

연관을 통해 has_many에 대해 meta_search가 잘 작동해야합니다 (예 : habtm).

모두를 돌려주는 다음 제대로 필터링 된 결과의
class User < ActiveRecord::Base 
    has_many :users_teams, :class_name => 'UsersTeams', :dependent => :destroy 
    has_many :teams, :through => :users_teams 
end 

모든 :

User.search :teams_id_equals=>999 
User.search :users_teams_team_id_equals=>999 
User.search :teams_id_equals_any=>[999] 
User.search :users_teams_team_id_equals_any=>[999] 

나는 당신의 문제가 의심 자체를 meta_search하지만되지 않을 수 있습니다 다른 원인 (같은 나는 사용자가 어디에 많은 팀 모델을 가지고 있습니다 양식 매개 변수가 정확하게 수신되지 않고 검색에 전달되지 않았거나 연결이 올바르게 정의되지 않았습니다).

먼저 모델 수준에서 검색을 수행하도록 제안하십시오 (위의 쿼리와 같은 콘솔을 사용하지만 프로젝트에 이상적으로 테스트 할 것을 권장합니다). 다음은 매개 변수가 올바르게 수신되어 검색으로 전달되는지 확인하는 것입니다.

+0

응답 해 주셔서 감사합니다. 실제로 "product_categorizations_category_id_equals_any"에서 "any"를 삭제해야했습니다. 나는 배열이있을 때에 만 any가 필요할 것이라고 생각한다. 확실하지 않다. – noob

+0

아, 이해가 가는군요! 예, 배열 선택을 기대합니다. 다중 선택 목록이있는 것처럼 말입니다. – tardate