Вы пытаетесь отсортировать массив из двух элементов:
- хэш: амазонка,
- внутренний большой массив.
Итак, любой вызов сортировки в верхнем массиве попытается отсортировать эти два элемента.
Чего вы пытаетесь достичь можно сделать следующим образом:
a[1] = a[1].sort_by {|f| f[:price].to_i}
Редактировать: для более общего подхода:
# declare source array
a = [:amazon,
[{:price=>" 396 ", :author=>"Motwani", :name=>"Randomized Algorithms ", :url=>"", :source=>"amazon"},
{:price=>" 255 ", :author=>"Thomas H. Cormen", :name=>"Introduction To Algorithms ", :url=>"", :source=>"amazon"}]]
# convert to hash for easier processing
b = Hash[*a]
# now sort former inner table by price
b.merge!(b) {|k, v| v.sort_by {|p| p[:price].to_i}}
# return to old representation
b.to_a[0]
=> [:amazon, [{:price=>" 255 ", :author=>"Thomas H. Cormen", :name=>"Introducti
on To Algorithms ", :url=>"", :source=>"amazon"}, {:price=>" 396 ", :author=>"M
otwani", :name=>"Randomized Algorithms ", :url=>"", :source=>"amazon"}]]