calling a method in model from view

11,569

Solution 1

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.

Solution 2

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

Solution 3

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!

Share:
11,569
bennett_an
Author by

bennett_an

Career Firefighter/Paramedic. Interested in Ruby on Rails, PHP, Javascript. Versed in HTML and CSS

Updated on June 17, 2022

Comments

  • bennett_an
    bennett_an almost 2 years

    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?

  • gotqn
    gotqn almost 11 years
    Could you tell is it all right to call a model method in the view, because we are skipping the controller in that way? Also, if it is a not good practice, what is the alternative?