Railsアプリケーションにリストのリストを表示するページがあります(will_paginateを使用してページ分割されています)。このページのリストを使用して検索と並べ替えを実装するための優れた宝石を見つけようとしています。ランサックの宝石は私が必要としていたもののように見えましたが、問題が発生しています。これは、私のコードがRansackgemで現在どのように見えるかです。
私のモデル(モデル全体が含まれていなかった、検証と余分なコードが邪魔にならないようにしたかった):
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
フィールドには、「略奪可能」なすべてのオプションが表示されています。1つの属性を検索に使用できるようにするが、並べ替えには使用できないようにする方法はありますか?たとえば、属性を検索する機能が必要description
ですが、その属性を並べ替えに含めるのは意味がありません。一方で属性を使用し、もう一方では使用しないようにするにはどうすればよいですか?助けてくれてありがとう、そして私の質問が十分に明確でないなら私に知らせてください。