2011-10-04 79 views
2

我有產品模型,類別模型和product_categorization模型(has_many ...,通過關聯)。我正在使用meta_search gem來進行產品搜索。出於某種原因,即使我的日誌正在拉動正確的標準,但不會根據類別過濾產品。無論我選擇什麼,它總是顯示所有的產品。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不是rails 3兼容,除非你得到補丁。 searchlogic的補丁版本是否比meta_search更好?謝謝。

UPDATE:解決:

的sooo很多時間琢磨這個過之後,我想通了。我不確定這是否是解釋,但是*從「:product_categorizations_category_id_equals_any」*中刪除「any」後,我才能使用它。我認爲原因是因爲這是一個通過關聯的has_many,category_id不是作爲數組存儲的,所以「any」不相關。我的解釋可能完全失效,但它的工作原理。

回答

1

meta_search應該可以通過關聯(例如habtm)爲has_many正常工作,例如,我有一個用戶有很多球隊模型,其中:

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」。我認爲只有有數組時纔有必要這樣做?不確定。 – noob

+0

ahah,這很有道理!是的,_any需要一個數組,就像你有一個多選列表一樣 – tardate