вызов метода в модели из представления - PullRequest
6 голосов
/ 03 января 2012

Я пытаюсь оценить, какой индикатор должен отображаться рядом с элементом, на основе того, просматривался ли он ранее или нет, новых комментариев и т. Д. До тех пор, пока я не выберу символ для использования, я просто хочу, чтобы число отображалось.

в моей модели отчета у меня есть

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

, на мой взгляд, у меня есть

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

Я получаю undefined method 'indicator'

Я думал, что у меня естьпонять, как работают методы ... но явно нет, что я делаю не так?

Ответы [ 3 ]

6 голосов
/ 03 января 2012

По вашему мнению, вы вызываете метод экземпляра indicator для каждого объекта отчета

report.indicator

Но в вашей модели вы определили метод класса.Итак, чтобы заставить его работать, определите ваш метод индикатора как метод экземпляра:

def indicator
  #bunch of if elsif statements returning a number 0-3
end
6 голосов
/ 03 января 2012

Попробуйте

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

Вам не нужна личность, поскольку она [исправлена ​​на] метод уровня класса.

2 голосов
/ 03 января 2012

Ваша переменная итерации report используется для прохождения каждого экземпляра @reports. С self.indicator вы объявляете метод класса (через self.name). Так что это позволило бы позвонить Report.indicator. Вам нужно вызвать только один экземпляр Report, чтобы вы могли определить индикатор метода в вашей модели следующим образом:

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

Теперь это должно работать!

...