Migrate item search away from item translations

Lightning fast for simple name queries now, gotta say!!
This commit is contained in:
Emi Matchu 2024-02-20 16:04:41 -08:00
parent 04af1ee319
commit 3ac9e7ce69
3 changed files with 11 additions and 28 deletions

View file

@ -11,8 +11,8 @@ class ItemsController < ApplicationController
else
per_page = 30
end
@items = @query.results.includes(:translations).
paginate(page: params[:page], per_page: per_page)
@items = @query.results.paginate(
page: params[:page], per_page: per_page)
assign_closeted!
respond_to do |format|
format.html {
@ -44,7 +44,7 @@ class ItemsController < ApplicationController
respond_to do |format|
format.html {
@campaign = Fundraising::Campaign.current rescue nil
@newest_items = Item.newest.includes(:translations).limit(18)
@newest_items = Item.newest.limit(18)
}
format.js { render json: {error: '$q required'}}
end
@ -86,8 +86,7 @@ class ItemsController < ApplicationController
raise ActiveRecord::RecordNotFound, 'Pet type not found'
end
@items = @pet_type.needed_items.includes(:translations).
alphabetize_by_translations
@items = @pet_type.needed_items.order(:name)
assign_closeted!
respond_to do |format|

View file

@ -28,13 +28,6 @@ class Item < ApplicationRecord
cattr_reader :per_page
@@per_page = 30
scope :alphabetize_by_translations, ->(locale) {
locale = locale or I18n.locale
it = Item::Translation.arel_table
joins(:translations).where(it[:locale].eq('en')).
order(it[:name].asc)
}
scope :newest, -> {
order(arel_table[:created_at].desc) if arel_table[:created_at]
}
@ -44,14 +37,10 @@ class Item < ApplicationRecord
scope :with_closet_hangers, -> { joins(:closet_hangers) }
scope :name_includes, ->(value, locale = I18n.locale) {
it = Item::Translation.arel_table
Item.joins(:translations).where(it[:locale].eq(locale)).
where(it[:name].matches('%' + sanitize_sql_like(value) + '%'))
Item.where("name LIKE ?", "%" + sanitize_sql_like(value) + "%")
}
scope :name_excludes, ->(value, locale = I18n.locale) {
it = Item::Translation.arel_table
Item.joins(:translations).where(it[:locale].eq(locale)).
where(it[:name].matches('%' + sanitize_sql_like(value) + '%').not)
Item.where("name NOT LIKE ?", "%" + sanitize_sql_like(value) + "%")
}
scope :is_nc, -> {
i = Item.arel_table
@ -62,16 +51,12 @@ class Item < ApplicationRecord
where(i[:rarity_index].in(Item::NCRarities).or(i[:is_manually_nc].eq(true)).not)
}
scope :is_pb, -> {
it = Item::Translation.arel_table
joins(:translations).where(it[:locale].eq('en')).
where('description LIKE ?',
'%' + sanitize_sql_like(PAINTBRUSH_SET_DESCRIPTION) + '%')
where('description LIKE ?',
'%' + sanitize_sql_like(PAINTBRUSH_SET_DESCRIPTION) + '%')
}
scope :is_not_pb, -> {
it = Item::Translation.arel_table
joins(:translations).where(it[:locale].eq('en')).
where('description NOT LIKE ?',
'%' + sanitize_sql_like(PAINTBRUSH_SET_DESCRIPTION) + '%')
where('description NOT LIKE ?',
'%' + sanitize_sql_like(PAINTBRUSH_SET_DESCRIPTION) + '%')
}
scope :occupies, ->(zone_label) {
zone_ids = Zone.matching_label(zone_label).map(&:id)

View file

@ -11,8 +11,7 @@ class Item
end
def results
@filters.map(&:to_query).inject(Item.all, &:merge).
alphabetize_by_translations(Query.locale)
@filters.map(&:to_query).inject(Item.all, &:merge).order(:name)
end
def to_s