Обновление - см. Комментарий ниже, который ссылается на истинное объяснение protected
/ private
в Ruby . Это было глубоко укоренившееся предубеждение, оставшееся с моих дней Java. Единственная важная часть, оставленная моим ответом, состоит в том, что методы контроллера, которые не являются действиями, не должны быть public
(или, по крайней мере, ваши маршруты должны их защищать).
Наследование в одной таблице - прекрасный пример того, когда protected
полезен на уровне модели, так как это одно из наиболее распространенных видов наследования.
На уровне контроллера вспомогательные методы, определенные в ApplicationController
, должны быть помечены как protected
- если бы они были private
, то другие контроллеры не смогли бы получить к ним доступ, но если они public
, Rails будет относитесь к ним как к действиям.
Лично я нахожу, что я использую наследование классов больше, чем многие из моих друзей и коллег, даже в приложениях Rails. Поскольку я использую его часто (и выходя из моих дней Java), я предпочитаю protected
для всех вспомогательных методов, чтобы дать свободу любому (обычно самому), кто хочет расширить класс - если я действительно не смущаюсь по поводу одного , тогда я отмечаю это private
. :)