5

Sto provando a valutare quale indicatore deve essere visualizzato accanto a un elemento in base a se è stato visualizzato prima o no, nuovi commenti ecc. Fino a quando decido un simbolo da usare, ho solo vuoi un numero da mostrare.chiamando un metodo nel modello dalla vista

nel mio modello di report devo

def self.indicator 
    #bunch of if elsif statements returning a number 0-3 
end 

a mio avviso ho

<% @reports.each do |report| %> 
    <%= report.indicator %> 
<% end %> 

ottengo undefined method 'indicator'

pensavo di avere una presa su come metodi di lavoro ... ma chiaramente no, cosa sto sbagliando?

+0

Si prega di mostrare il messaggio di errore completo. Include una classe/oggetto o è un metodo non definito su zero? –

+0

Mostra anche l'istruzione controller per la vista che contiene @reports = Report.all o Report.find (...), ecc. –

risposta

6

Prova

def indicator 
    #bunch of if elsif statements returning a number 0-3 
end 

Non è necessario l'auto in quanto [corretta per] è un metodo di livello di classe.

+3

Puoi dire che va bene chiamare un metodo di modello nella vista, perché noi stanno saltando il controller in quel modo? Inoltre, se non è una buona pratica, qual è l'alternativa? – gotqn

2

La variabile di iterazione report viene utilizzata per esaminare tutte le istanze di @reports. Con self.indicator si dichiara un metodo di classe (tramite self.name). Quindi questo renderebbe possibile chiamare Report.indicator. Ciò che si vuole è quello di chiamare solo su una singola istanza di relazione, in modo da poter definire l'indicatore di metodo nel modello come questo:

def indicator 
    #bunch of if elsif statements returning a number 0-3 
end 

Ora, questo dovrebbe funzionare!

6

Secondo lei, si chiedono un metodo di istanza indicator su ogni oggetto report

report.indicator 

Ma nel modello, è stato definito un metodo di classe. Quindi, per farlo funzionare, definisci il tuo metodo indicatore anche come metodo di istanza:

Problemi correlati