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 существуют методы и объекты?

Отметьте эту тему.