Вы когда-либо используете защищенную видимость в направляющих?

На какой платформе вы работаете? Я бы порекомендовал использовать для этого предпочтительный / общий метод.

  1. MacOSX - списки
  2. Win32 - реестр (или здесь есть новый, давно я его разработал)
  3. Linux / Unix - ~ / .apprc (имя -значение возможно)
14
задан pez_dispenser 22 May 2009 в 06:11
поделиться

2 ответа

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

Наследование одной таблицы - прекрасный пример того, когда protected полезен на уровне модели, так как это одно из наиболее распространенных применений наследования.

На уровне контроллера вспомогательные методы, определенные в ApplicationController , должны быть помечены как ] protected - если бы они были частными , другие контроллеры не смогли бы получить к ним доступ, но если они общедоступные Rails будет рассматривать их как действия.

Лично я считаю, что использую наследование классов чаще, чем многие мои друзья и коллеги, даже в приложениях Rails. Поскольку я использую его часто (и уже не так давно, как я), я предпочитаю protected для всех вспомогательных методов, чтобы дать свободу любому (обычно мне), кто хочет расширить класс - если я действительно очень стесняюсь одного, то помечаю его частным . :)

Я предпочитаю protected для всех вспомогательных методов, чтобы дать свободу любому (обычно мне), кто хочет расширить класс - если меня действительно не смущает один, я помечаю его закрытым . :)

Я предпочитаю protected для всех вспомогательных методов, чтобы дать свободу любому (обычно мне), кто хочет расширить класс - если меня действительно не смущает один, я помечаю его закрытым . :)

9
ответ дан 1 December 2019 в 15:22
поделиться

У меня есть SingleTableInheritance

класс Person

И я использую защищенные методы для реализации частного метода, который является общим для ученика и учителя:

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

Отказ от ответственности: есть плагины, такие как act-as-paranoid и другие, для реализации функции, которую я использую здесь, чтобы покажу вам случай, но у меня есть более сложный ландшафт, который я здесь упростил, чтобы понять вашу точку зрения.

0
ответ дан 1 December 2019 в 15:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: