2013-02-12 2 views
2

목록 목록을 표시하는 레일 애플리케이션에 페이지가 있습니다 (will_paginate를 사용하여 페이지 매김). 이 페이지의 목록을 검색 및 정렬하기 위해 좋은 보석을 찾으려고합니다. Ransack 보석은 내가 필요로했던 것처럼 보였다. 그러나 나는 그것에 관한 문제로 달리고있다. 이것이 바로 Ransack 보석과 관련된 코드입니다.레일 3 렁을 사용하여 검색 및 정렬 및 정렬 옵션에서 옵션 제한 시도

내 모델 (방법으로 얻을 수있는 검증 및 추가 코드를 원하지 않았다, 전체 모델을 포함하지 않았다) :

UNRANSACKABLE_ATTRIBUTES = ["id", "state", "show_email", "email", "show_phones", "primary_phone", "secondary_phone", "updated_at", "user_id"] 

def self.ransackable_attributes auth_object = nil 
    (column_names - UNRANSACKABLE_ATTRIBUTES) + _ransackers.keys 
end 

내 컨트롤러 액션 :

def index 
    @search = Listing.search(params[:q]) 
    @listings = @search.result.paginate(page: params[:page], per_page: 20, joins: "LEFT OUTER JOIN attachments ON listings.id = attachments.attachable_id", select: "listings.*, COUNT(attachments.id) AS photos", group: "listings.id", order: "listings.created_at DESC, listings.title ASC, listings.id DESC") 
    @search.build_sort if @search.sorts.empty? 
end 

<div class="advanced-search"> 
     <%= search_form_for @search do |f| %> 
      <div class="search-by"> 
       <div class="search-field"> 
        <%= f.label :title_cont, "Title Contains" %> 
        <%= f.text_field :title_cont %> 
       </div> 
       <div class="search-field"> 
        <%= f.label :description_cont, "Description Contains" %> 
        <%= f.text_field :description_cont %> 
       </div> 
       <div class="search-field"> 
        <%= f.label :price_gteq, "Price Between" %> 
        <%= f.text_field :price_gteq %> 
        <%= f.label :price_lteq, "and" %> 
        <%= f.text_field :price_lteq %> 
       </div> 
      </div> 
      <div class="sort-by"> 
       <%= f.sort_fields do |s| %> 
        <%= s.sort_select %> 
       <% end %> 
      </div> 
      <div class="search-actions"> 
       <%= f.submit "Search" %> 
      </div> 
     <% end %> 
    </div> 

내 경로 :

페이지의 검색 양식
resources :listings do 
    collection do 
    match 'search' => 'listings#index', via: [:get], as: :search 
    end 
end 

내가 가진 모든 것들이 이제 나는 목록을 성공적으로 검색하고 정렬 할 수있는 응용 프로그램을 얻을 수있었습니다.

내 질문 :sort_select 필드에 "ransackable"이라는 모든 옵션이 표시됩니다. 하나의 속성을 검색에 사용할 수있게하는 방법이 있습니까? 이 아닌 정렬? 예를 들어, description 속성에서 검색하는 기능을 원하지만 해당 속성을 정렬에 포함시키는 것은 의미가 없습니다. 어떻게 다른 속성이 아닌 하나의 속성을 사용할 수 있습니까? 어떤 도움을 주셔서 감사하며 제 질문이 충분히 명확하지 않은 경우 알려주십시오.

답변

0

드롭 다운에 원하는 값을 얻는 방법을 알 수 없으므로 대신 링크를 사용했습니다. 여기 내가 정렬을 위해 끝난거야.

Sort by <%= sort_link @search, :title %> | <%= sort_link @search, :price %> | <%= sort_link @search, :created_at, "Date Listed" %> 
+0

사용하려는 경우이 순간 (https://github.com/ernie/ransack/pull/204) 풀 요청이 있습니다. 병합되는지 아닌지는 지금 알 수 없습니다. – jhdavids8