Обновление - См. Комментарий ниже, который ссылается на true explanation of protected
/private
in Ruby. Это было глубоко укоренившееся предрассудок, оставшееся от моих дней Java. Единственная важная часть, оставшаяся до моего ответа, заключается в том, что методы контроллера, которые не являются действиями, не должны быть public
(или, по крайней мере, ваши маршруты должны их защищать).
Однозначное наследование является прекрасным примером того, когда protected
полезен в уровне модели, поскольку это одно из наиболее распространенных способов использования наследования.
В ярусе контроллера, вспомогательные методы, определенные на ApplicationController
должны быть помечены как protected
- если бы они были private
другие контроллеры не смогут получить к ним доступ, но если они public
Рельсы будут относиться к ним как действия.
Лично я считаю, что я использую наследование класса больше, чем многие мои друзья и коллеги, даже в приложениях Rails. Поскольку я часто использую его (и выхожу из своих Java-дней), я предпочитаю protected
для всех вспомогательных методов, предоставляющих свободу любому (как правило, самому себе), который хочет расширить класс - если я действительно не смущен одним, тогда Я отмечаю его private
. :)
Это имеет большой смысл. (Не знаю, что такое ИППП). –
«Вспомогательные методы, определенные на ApplicationController, должны быть отмечены как защищенные - если они были частными, другие контроллеры не смогут получить к ним доступ» - fyi, это неверно. См. Пример здесь: http://pastie.org/842898. Защищенный/закрытый в Ruby - это «я» и приемники, а не наследование. «Обратите внимание, что в отличие от языков, таких как Java, наследование абсолютно не играет роли в определении видимости метода в Ruby». - http://weblog.jamisbuck.org/2007/2/23/method-visibility-in-ruby –
Спасибо, Иордания. Ты прав. Я добавил небольшую заметку. –