Domanda

Confessione:Io uso solo privato e pubblico visibilità per i miei metodi!

Ho la sensazione che questa è una brutta cosa.Ma in Rails non pare proprio a venire come un problema.

Qualcuno ha un esempio in Rails, dove sarebbe un grosso errore a non utilizzare protetta la visibilità?

È stato utile?

Soluzione

Aggiornamento -- Si prega di vedere il commento qui sotto che si collega a un la vera spiegazione di protected/private in Ruby.Che era un profondo pregiudizio di sinistra dai miei Java giorni, anzi.L'unica parte importante sinistro per la mia risposta è che i metodi del controller che non sono azioni non dovrebbe essere public (o almeno rotte dovrebbe proteggere).

Singola Tabella Eredità, è un perfetto esempio di quando protected è utile nel modello di livello, in quanto è uno degli usi più comuni di ereditarietà c'.

Nel controller di livello, metodi di supporto definiti sulla ApplicationController dovrebbe essere contrassegnato come protected -- se fossero private gli altri controller di non essere in grado di accedervi, ma se sono public Guide li trattano come azioni.

Personalmente, trovo che utilizzare l'ereditarietà di classe di più di molti miei amici e colleghi, anche nelle applicazioni Rails.Perché lo uso spesso (e venuta fuori la mia versione di Java giorni), io sono a favore protected per tutti i metodi di supporto per dare la libertà a chiunque (di solito io) che vuole estendere la classe -- a meno che io sono davvero imbarazzato, poi ho segnare private. :)

Altri suggerimenti

Ho SingleTableInheritance

classe Persona <AR::base Insegnante di classe <Persona classe Studente < Persona

E io uso i metodi protetti per implementare un metodo privato che è comune per Studenti e docenti:

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

Disclaimer:Ci sono dei plugin come agire-come-paranoico e altri per implementare la funzione che uso qui per mostrarvi il caso, ma ho un più complesso del paesaggio, che ho semplificato qui per ottenere il vostro punto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top