Ruby on Rails - Является ли params методом или хешем?
Итак, я пробовал раздел Начало работы направляющих Ruby on Rails здесь. p >
В этом уроке я не понял line. Цитируя это:
Метод params - это объект, который представляет параметры (или поля), входящие в форму.
У меня есть предыдущий опыт работы с рельсами, и я всегда предполагал, что params
является хешем. Но здесь они называют это method which is an object
.
Является params
a method
или hash
? Кроме того, в ruby, методы также объекты?
Ответы
Ответ 1
-
Описание немного усечено. Если быть точным, его следует читать как:
Возвращаемое значение метода params
является [an] объектом...
Метод не является объектом, но при выполнении метода он всегда возвращает объект. В этом случае params
- это метод, а не объект, но имеет возвращаемое значение, которое является объектом.
-
В более старых версиях Rails возвращаемое значение params
использовалось как хэш, но теперь это не хэш.
Ответ 2
-
params
- это метод, который возвращает объект ActionController::Parameters
. Подумайте об этом примерно так:
def params
ActionController::Parameters.new(...)
end
Пример (где-то на вашем контроллере или в представлении):
puts params
#=> <ActionController::Parameters ...>
puts params.is_a? Object
#=> true
-
Метод в Ruby всегда возвращает значение (примечание: nil
также является значением), если только > метод не определен. Имейте в виду, что params
уже определен Rails, даже если вы не видите его в своем коде)
-
Каждое "возвращаемое значение" метода в Ruby является объектом. Даже значение nil
- это NilClass
объект. Целые числа, строки, массивы и хэши также являются объектами. Зачем? Поскольку eveeeeery вещь наследует/запускает из класса Object
.
-
Если < Rails 5.1:
-
ActionController::Parameters
наследует от Hash
класс, что означает, что вы можете использовать все Hash
методы (см. здесь хэш-методы).
Пример:
params.sort ...
params.each ...
params.has_key?(:controller)
-
Но теперь при >= Rails 5.1:
-
ActionController::Parameters
НЕТ ДОЛГОЙ наследует от Hash
класс, поэтому вы можете думать, что больше не можете использовать такие методы, как приведенный выше код типа .sort
, или .has_key?
, но вы все еще можете! потому что ActionController::Parameters
определяет собственные методы, которые похожи на методы Hash
.
- ПРИМЕЧАНИЕ. Не все методы Хэш переопределены в
ActionController::Parameters
. Не стесняйтесь сравнивать методы ЗДЕСЬ и ЗДЕСЬ, в частности sort
метод Hash
не был переопределен в ActionController::Parameters
, поэтому вы больше не можете делать params.sort
в Rails >= 5.1.
Ответ 3
params
- это метод, который возвращает объект - экземпляр ActionController::Parameters
.
У него есть методы, которые заставляют его вести себя как хэш, но он немного сложнее хеша.
Кроме того, в Ruby существуют методы и объекты?
Отметьте эту тему.