5

Estoy tratando de evaluar qué indicador debe mostrarse junto a un elemento en función de si se ha visto antes o no, nuevos comentarios, etc. Hasta que decida sobre un símbolo para usar, simplemente quiero un número para mostrar.llamando a un método en el modelo de la vista

en mi Informe modelo que he

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

en mi opinión tengo

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

consigo undefined method 'indicator'

pensé que tenía un control sobre cómo funcionan los métodos ... pero claramente no, ¿qué estoy haciendo mal?

+0

Por favor, muestre el mensaje de error completo. ¿Incluye una clase/objeto o es ese método indefinido en nil? –

+0

También, por favor, muestre la declaración del controlador para la vista que muestra @reports = Report.all o Report.find (...), etc. –

Respuesta

6

Trate

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

No es necesario el auto, ya que [corregido a] es un método de nivel de clase.

+3

¿Podría decir que está bien llamar a un método modelo en la vista, porque están salteando el controlador de esa manera? Además, si no es una buena práctica, ¿cuál es la alternativa? – gotqn

2

Su variable de iteración report se utiliza para cada instancia de @reports. Con self.indicator está declarando un método de clase (a través de self.name). Entonces esto haría posible llamar al Report.indicator. Lo que se quiere es llamar simplemente en una sola instancia de informe, por lo que puede definir el indicador de método en su modelo como este:

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

Ahora bien, esto debería funcionar!

6

En su opinión, está llamando a un método de instancia indicator en cada objeto de informe

report.indicator 

Pero en su modelo, se ha definido un método de clase. Entonces, para hacerlo funcionar, defina su método de indicador como un método de instancia, también:

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