Order array. undefined method `order' for Array. Convert array into hash?
order
is a method used for sorting at the database level. since @hotels
is an array, you won't be able to sort using order
. Try the following (not tested and you may want to include array pagination if you haven't included it yet)
@hotels = @hotels.sort_by(&:"#{sort_column}")
@hotels = @hotels.reverse if sort_direction == 'DESC'
@hotels = @hotels.paginate(:page => params[:page], :per_page => 5)
Comments
-
Ilya Cherevkov almost 2 years
I have a City model and in city's show action I want to render hotels nearby specific locations in the city. Cities has_many locations; hotels are being searched using Geocoder near method.
To add order functionality I've followed Ryan Bates screencasts #228, but this approach doesn't seem to work with arrays, giving error
undefined method `order' for #< Array:0x007f960d003430>
cities_controller.rb helper_method :sort_column, :sort_direction def show session[:search_radius] = 2 if session[:search_radius].blank? @city = City.find(params[:id]) @locations = @city.locations @hotels = [] @locations.each do |location| unless location.longitude.blank? || location.latitude.blank? center_point = [location.latitude, location.longitude] box = Geocoder::Calculations.bounding_box(center_point, session[:search_radius]) thotels = Hotel.near(center_point, session[:search_radius]).within_bounding_box(box) else thotels = Hotel.near(center_point, session[:search_radius]) end @hotels += thotels if thotels @hotels = @hotels.uniq end @hotels = @hotels.order(sort_column + " " + sort_direction).paginate(:page => params[:page], :per_page => 5) @json = @locations.to_gmaps4rails respond_with @json, :location => city_url end private def sort_column Hotel.column_names.include?(params[:sort]) ? params[:sort] : "name" end def sort_direction %w[asc desc].include?(params[:direction]) ? params[:direction] : "asc" end
My question is: should I concentrate in converting an array into hash or should I initially create hash of hotels, or maybe find completely different approach to perform sorting?