Требуется линейный поиск, чтобы определить, содержит ли Product.column_names
данный элемент. Если этот массив большой и не изменится во время выполнения кода, и sort_column
должен вызываться несколько раз, производительность можно улучшить, преобразовав этот массив в набор. Определение того, содержит ли набор заданный элемент, выполняется очень быстро, время поиска сопоставимо с тем, которое требуется для определения, имеет ли га sh данный ключ.
require 'set'
names_set = Product.column_names.to_set
def sort_column(params, names_set)
ps = params[:sort]
return "name" unless names_set.include?(ps)
["price_latest", "price_average"].include?(ps) ?
"#{ps}->'#{cookies[:store_id]}'" : "home"
end