3 Domanda: Quando utilizzare Helpers vs Model

domanda creata a Wed, Feb 16, 2011 12:00 AM

Sono nuovo di Rails e mi chiedo solo quando dovrei inserire il codice in un Helper anziché inserire il codice nel Modello.

Esiste una "regola generale" per così dire?

    
31
3 risposte                              3                         

Utilizza gli helper se stai lavorando in una vista (modello) e hai bisogno di costruire un bit complesso di HTML come un <table>. Oppure, se vuoi modificare alcuni dati di presentazione che non sono collegati al database.

 
def truncate_html( html, options = {} )
  options[:length] = 35 unless options[:length]
  truncate( strip_tags( html ), options )
end

Utilizza i modelli quando lavori con oggetti di database e vuoi semplificare la logica di business.

 
  def one_day?
    start_date.to_s[0,9] == end_date.to_s[0,9]
  end  

Ecco gli Aiutanti nelle guide: http: //guides.rubyonrails. org /form_helpers.html

Ed ecco i Modelli : http://guides.rubyonrails.org/active_record_querying.html

    
27
2018-02-16 04: 40: 52Z
  1. "bit complesso di HTML come a." --- come cosa?
    2012-07-20 05: 39: 38Z
  2. Questo era < table > ma ho usato < > invece di & gt; e & lt; - Grazie per la presa!
    2012-07-20 18: 02: 54Z
  3. @ ChuckBergeron Oppure usa solo i backtick per indicare l'uso del codice. Risolto il problema per te ;)
    2018-02-16 04: 41: 16Z
  4. @ JoshuaPinter 👍Classic, indietro quando non sapevo di backtick. 🙃
    2018-02-16 17: 25: 01Z

È meglio usare gli helper quando il codice che l'helper sta creando è pensato per essere visualizzato solo nella vista. Ad esempio se vuoi avere metodi che aiutano a creare link HTML, dovrebbero andare in helper:

 
def easy_link user
  link_to(user.name, user)
end

Se il tuo codice è di business logic, dovrebbe andare nei tuoi modelli. Dovresti anche mirare a mettere tanta logica aziendale nei tuoi modelli, non vuoi questo codice nelle viste e nei controller. Ad esempio, se desideri elaborare un ordine, tale codice dovrebbe essere inserito nel modello:

 
def process
  raise NotReadyToProcess unless ready_to_process?
  raise NotValidPaymentDetails unless valid_payment_details?
  process_payment
end
    
6
2011-02-16 17: 31: 29Z

Gli helper dovrebbero contenere solo la logica per la vista ​​p>

I modelli dovrebbero contenere solo la logica relativa all'oggetto modellato, mai correlato con la transazione eseguita né la vista visualizzata ​​p>     

3
2011-02-16 17: 31: 19Z
fonte posta Qui