Reputation: 1708
I am trying to evaluate which indicator needs to be displayed next to an item based on if it's been viewed before or not, new comments etc. Until I decide on a symbol to use, I just want a number to display.
in my Report Model i have
def self.indicator
#bunch of if elsif statements returning a number 0-3
end
in my view i have
<% @reports.each do |report| %>
<%= report.indicator %>
<% end %>
I get undefined method 'indicator'
I thought I had a grip on how methods work... but clearly not, what am I doing wrong?
Upvotes: 6
Views: 11947
Reputation: 11198
In your view, you are calling an instance method indicator
on each report object
report.indicator
But in your model, you have defined a class method. So, to make it work, define your indicator method as an instance method, too:
def indicator
#bunch of if elsif statements returning a number 0-3
end
Upvotes: 6
Reputation: 2213
Your iteration variable report
is used for going through every instance of @reports
. With self.indicator
you are declaring a class method (via self.name
). So this would make it possible to call Report.indicator
. What you want is to call just on a single instance of Report, so you can define the method indicator in your model like this:
def indicator
#bunch of if elsif statements returning a number 0-3
end
Now this should work!
Upvotes: 2
Reputation: 96454
Try
def indicator
#bunch of if elsif statements returning a number 0-3
end
You don't need the self as it [corrected to] is a class level method.
Upvotes: 6