/artists: sort autocomplete by post count.

* Add search[order]=post_count param to /artists.
* Make autocomplete do a prefix match ordered by post count, so that it
  works the same way that tag autocomplete does elsewhere.
This commit is contained in:
evazion
2017-04-07 17:20:57 -05:00
parent fbba167f0c
commit 6b462c865e
4 changed files with 9 additions and 6 deletions

View File

@@ -53,8 +53,9 @@
$.ajax({
url: "/artists.json",
data: {
"search[name]": "*" + req.term + "*",
"search[name]": req.term + "*",
"search[is_active]": true,
"search[order]": "post_count",
"limit": 10
},
method: "get",

View File

@@ -38,7 +38,7 @@ class ArtistsController < ApplicationController
def index
search_params = params[:search].present? ? params[:search] : params
@artists = Artist.includes(:urls).search(search_params).order("id desc").paginate(params[:page], :limit => params[:limit], :search_count => params[:search])
@artists = Artist.includes(:urls).search(search_params).paginate(params[:page], :limit => params[:limit], :search_count => params[:search])
respond_with(@artists) do |format|
format.xml do
render :xml => @artists.to_xml(:include => [:urls], :root => "artists")

View File

@@ -419,11 +419,13 @@ class Artist < ActiveRecord::Base
params[:order] ||= params.delete(:sort)
case params[:order]
when "name"
q = q.reorder("artists.name")
q = q.order("artists.name")
when "updated_at"
q = q.reorder("artists.updated_at desc")
q = q.order("artists.updated_at desc")
when "post_count"
q = q.joins(:tag).order("tags.post_count desc")
else
q = q.reorder("artists.id desc")
q = q.order("artists.id desc")
end
if params[:is_active] == "true"

View File

@@ -15,7 +15,7 @@
<th><label for="search_order">Order</label>
<td>
<div class="input">
<%= select "search", "order", [["Recently created", "created_at"], ["Last updated", "updated_at"], ["Name", "name"]], :selected => params[:search][:order] %>
<%= select "search", "order", [["Recently created", "created_at"], ["Last updated", "updated_at"], ["Name", "name"], ["Post count", "post_count"]], :selected => params[:search][:order] %>
</div>
</td>
</tr>