목록 목록을 표시하는 레일 애플리케이션에 페이지가 있습니다 (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
속성에서 검색하는 기능을 원하지만 해당 속성을 정렬에 포함시키는 것은 의미가 없습니다. 어떻게 다른 속성이 아닌 하나의 속성을 사용할 수 있습니까? 어떤 도움을 주셔서 감사하며 제 질문이 충분히 명확하지 않은 경우 알려주십시오.
사용하려는 경우이 순간 (https://github.com/ernie/ransack/pull/204) 풀 요청이 있습니다. 병합되는지 아닌지는 지금 알 수 없습니다. – jhdavids8