2009-09-23 3 views
2

У меня есть много продуктов со многими категориями, которые связаны с has_many, используя членство.Категория раскрывающееся меню Поиск продукта

Я пытаюсь создать окно поиска, в котором любой может искать товары, а также отфильтровать их поиск с выпадающим списком категорий (так что можно получить только продукты с соответствующими категориями).

Индекс think_sphinx находится в модели продукта У меня нет ошибок, но выпадающее меню не влияет на поиск.



MODEL: 
    has_many :memberships,:dependent=> :destroy 
    has_many :categories, :through => :memberships 
    named_scope :published, :conditions => {:publish => 1} 
    define_index do 
     indexes product_name 
     indexes product_description 
     indexes publish 
     indexes memberships.product_id 
     indexes memberships.category_id 
     indexes categories.category_name 
     end 
    end 

CONTROLLER: 
    @products = Product.search params[:search],:conditions=>{@product.memberships.category_id =>params[:category_product] },:page=> params[:page] || 1,:per_page =>4 


VIEW: 
      form_tag search_path, :method =>:get do 
      text_field_tag :search, params[:search] 
      form_tag categories_path, :method => :get do 
      select_tag"category", options_from_collection_for_select (Category.find (:all, :group=>:id), :id, :category_name,params[:category_product]) 
      end 
      submit_tag "search", :name => nil 
      end 
+0

и вопрос будет? – andrewWinn

+0

Я совсем не уверен, как я могу использовать params [: category_product] для работы с @products – 2009-09-23 17:50:20

ответ

1

Вам необходимо использовать атрибут для фильтрации. В вашем define_index используйте метод «has», а в поиске используйте: с параметрами. Что-то вроде:

define_index do 
    … 
    has categories(:id), :as => categories_id 
    … 
end 

и поиск будет:

Product.search params[:search], :with => { :categories_id => params[:category] } 
+0

thnks я получил его работу, я новичок, было бы полезно, если бы вы просто помогли мне, уточнив 2 вещи, если возможно 1) in Product .search params [: search] ,: with => {: categories_id => params [: category]} Почему это не работает, если использовать params [: cat] Я думал, что это просто доступ из моих параметров [: cat] в поле зрения если я это сделаю, я получаю ** searchd error (статус: 1): неверный или усеченный запрос 2) если я пытаюсь использовать атрибут name вместо id, он не дает никаких результатов, хотя он создает запрос ex.model имеет категории (: category_name) ,: as => categories_name controller {: categories_name => params [: category]} thnx-a-lot-4-help – 2009-09-23 22:09:13

+0

вопрос 1, я не понимаю (зависит от вашего взгляда, я думаю). вопрос 2, вы не можете использовать строку в атрибутах, только числа и тому подобное. В любом случае лучше использовать id. Или вы должны сначала найти категорию по имени, прежде чем запускать поиск – tal