2009-07-25 2 views
2

일부 그림을 검색하는 데 searchlogic를 사용하고 있습니다. 각 그림은 하나의 범주에 속합니다. 내가하고 싶은 것은 사용자가 여러 범주를 표시 할 수 있도록 여러 검색 상자를 검색 양식에 추가하는 것입니다. (또는로 합쳐진) searchlogic으로 가능합니까? 내가 찾고 있어요 쿼리는 다음과 같이이다 :레일즈, searchlogic 체크 박스로 카테고리를 선택하십시오.

SELECT * FROM paintings WHERE category LIKE "white" OR category LIKE "red"... 

f.check_box :category (white) 
f.check_box :category (black) 
f.check_box :category (red) 
f.check_box :category (green) 

답변

5

여기를 할 수있는 슈퍼아요 쉬운 방법 (검색 개체를 가정입니다 @search) :

f.check_box :category_equals_any, {:name => "search[category_equals_any][]"}, "white" 
f.check_box :category_equals_any, {:name => "search[category_equals_any][]"}, "black" 
f.check_box :category_equals_any, {:name => "search[category_equals_any][]"}, "red" 
f.check_box :category_equals_any, {:name => "search[category_equals_any][]"}, "green" 
+0

감사합니다. –

1

그런 일이 귀하의 경우에 작동하는지 당신이 볼시겠습니까? 더 나은 해결책을 모르는 사람이라면 시간을 할애 할 것입니다.

여러분의 의견을 기다리겠습니다. 응용 프로그램/도우미/conditions_builder.rb에서

응용 프로그램에서

class ConditionsBuilder < ActionView::Helpers::FormBuilder 
    def multiple_select(collection, possibilities) 
    content = [] 
    id = "#{object_name}[#{collection}][]" 
    content << @template.hidden_field_tag(id, "") 

    ids = Set.new(self.object.send(collection)) 
    possibilities.each do |p, label| 
     uid = @template.sanitize_to_id("#{id}#{p}") 
     checked = ids.include?(p) 
     content << @template.content_tag("div", 
        @template.check_box_tag(id, p, checked, :id => uid) + " " + 
        @template.label_tag(uid, label)) 
    end 

    return content.join(" ") 
    end 
end 

/도우미 application.helper 추가/:

def conditions_form(&blk) 
    form_for @search, :builder => ConditionsBuilder, &blk 
end 

을보기에 당신은 추가 (내 경우에는 내가 HAML 사용) (이 그렇게 할 수있는 가장 좋은 방법이 있는지 확실하지 않습니다) :

내 경우
- conditions_form do |f| 
    - f.fields_for @search.conditions do |s| 
    = s.label 'Name' 
    = s.text_field 'name_contains' 
    = s.multiple_select :state_equals, ['open', 'active', 'gone'].collect{|s| [s, _state(s)]} 
    = f.submit _("Search"), :class => 'buttons' 

나는 약간의 기본값을 설정
unless params[:search] 
    @search.conditions.state_equals = ['open', 'active'] 
    end 
1

POST 요청을 통해 검색이 발생합니까? 당신이 ...이 같은

<% for category in %w[white red black] %> 
    <p> 
    <%= check_box_tag "categories[]", category, (params[:categories] && params[:categories].include?(category)) %> 
    <%=h category %> 
    </p> 
<% end %> 

그것을 할 그리고 다음과 같은 검색을 수행 할 수 있습니다 그렇다면 .. BTW

Painting.all(:conditions => { :category => params[:categories] }) 

을, 나는 id이있는 종류의 모델로 분류 열을 추출하는 것이 좋습니다 및 name 열. 회화에 category_id을 사용하여 연결을 연결할 수 있습니다. 이렇게하면 데이터베이스가 정규화되고 예를 들어 카테고리의 이름을 쉽게 바꾸고 추가 할 수 있습니다. Category.all으로 모두 루프 할 수도 있습니다.

0

난 내가 간단한 사용 내 컨트롤러에서보기

 <%= f.collection_select :category_id_equals, Category.all, :id, :name, :include_blank => true %> 

이를 사용

@search = Offer.search(params[:search]) 
    @search.order ||= "descend_by_id"   
    @offers = @search.all.paginate(:per_page => 20, :page => params[:page]) 
    @offers_count = @search.count 

내 객체의 서비스가 하나 개의 필드 CATEGORY_ID, 그는 검색을 구축하고 난 번째 이상 페이지를 매기는 사용 컨트롤러에 결과.

나는 누군가를 돕기를 바랍니다. :)

관련 문제