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?
As the two answers said, you should not be calling controller methods from your models. It is not recommended. Read into Model View Controller (MVC). To keep things independent.
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.
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
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!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With