На какой платформе вы работаете? Я бы порекомендовал использовать для этого предпочтительный / общий метод.
Обновление - См. Комментарий ниже, который ссылается на истинное объяснение protected
/ private
в Ruby ]. Это действительно было глубоко укоренившееся предубеждение, оставшееся со времен моих дней Java. Единственная важная часть, оставшаяся до моего ответа, это то, что методы контроллера, которые не являются действиями, не должны быть общедоступными
(или, по крайней мере, ваши маршруты должны их защищать).
Наследование одной таблицы - прекрасный пример того, когда protected
полезен на уровне модели, так как это одно из наиболее распространенных применений наследования.
На уровне контроллера вспомогательные методы, определенные в ApplicationController
, должны быть помечены как ] protected
- если бы они были частными
, другие контроллеры не смогли бы получить к ним доступ, но если они общедоступные
Rails будет рассматривать их как действия.
Лично я считаю, что использую наследование классов чаще, чем многие мои друзья и коллеги, даже в приложениях Rails. Поскольку я использую его часто (и уже не так давно, как я), я предпочитаю protected
для всех вспомогательных методов, чтобы дать свободу любому (обычно мне), кто хочет расширить класс - если я действительно очень стесняюсь одного, то помечаю его частным
. :)
protected
для всех вспомогательных методов, чтобы дать свободу любому (обычно мне), кто хочет расширить класс - если меня действительно не смущает один, я помечаю его закрытым
. :) Я предпочитаю protected
для всех вспомогательных методов, чтобы дать свободу любому (обычно мне), кто хочет расширить класс - если меня действительно не смущает один, я помечаю его закрытым
. :) У меня есть SingleTableInheritance
класс Person И я использую защищенные методы для реализации частного метода, который является общим для ученика и учителя: Отказ от ответственности: есть плагины, такие как act-as-paranoid и другие, для реализации функции, которую я использую здесь, чтобы покажу вам случай, но у меня есть более сложный ландшафт, который я здесь упростил, чтобы понять вашу точку зрения. class Person < AR::base
def self.find(*args)
reject_leaves(super(*args))
end
protected
def self.reject_leaves(target) #like a private in Teacher and Student
case target
when Array target.select{|t| reject_leaves(t)}
when Person (target.leave_date < Date.today ? target : nil)
else target
end
end
end