Метод sort_by устарел - Возможные решения? - PullRequest
1 голос
/ 26 марта 2020

мой текущий проект rails выдает предупреждение -

DEPRECATION WARNING: Method sort_by is deprecated and will be removed in Rails 5.1, as ActionController::Parameters no longer inherits from hash.

Я искал это предупреждение, а также возможные исправления, но ничего не могу найти относительно него. Мне интересно, есть ли у кого-нибудь здесь какие-либо предложения, исправления или замены для sort_by? Если это простое решение, я прошу прощения, поскольку я все еще изучаю рельсы.

Спасибо, что нашли время, чтобы прочитать и / или ответить.

Rails -v 5.0.7.2 | Ruby -v 2.6.4

Ответы [ 2 ]

1 голос
/ 26 марта 2020

В Rails 5 ActionController :: Parameters больше не наследуется от HashWithIndifferentAccess.

Inheriting from `HashWithIndifferentAccess` allowed users to call any
enumerable methods on `Parameters` object, resulting in a risk of losing the
`permitted?` status or even getting back a pure `Hash` object instead of
a `Parameters` object with proper sanitization.

Посмотрите на это изменение

Если вам нужно преобразовать ActionController :: Parameters в истинное значение ha sh, тогда оно поддерживает метод to_h , Также ActionController :: Parameters будет по-прежнему иметь методы, такие как fetch, slice, slice !, за исключением, кроме !, extract !, delete et c. Вы можете детально взглянуть на них здесь .

0 голосов
/ 26 марта 2020

Вы можете сортировать что угодно, используя обычный старый Ruby sort. Вот пример, который сортирует экземпляры Foo по key или val, вперед и назад:

class Foo
  attr_reader :key, :val

  def initialize(key, val)
    @key = key
    @val = val
  end

  def to_s
    "#{key}: #{val}"
  end
end

x = Foo.new('x', 1)
y = Foo.new('y', 2)

array = [x, y]

puts array.sort { |a, b| a.key <=> b.key }
puts array.sort { |a, b| b.key <=> a.key }
puts array.sort { |a, b| a.val <=> b.val }
puts array.sort { |a, b| b.val <=> a.val }
...