从视图中调用模型中的方法

时间:2012-01-02 20:50:43

标签: ruby-on-rails ruby-on-rails-3 model-view-controller methods model

我正在尝试评估哪个指标需要显示在项目旁边,如果它之前是否被查看过,新评论等等。在我决定使用的符号之前,我只想要一个数字来显示。 / p>

在我的报告模型中我有

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 个答案:

答案 0 :(得分:6)

尝试

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

你不需要自我,因为[纠正]是一个班级方法。

答案 1 :(得分:6)

在您的视图中,您在每个报表对象上调用实例方法indicator

report.indicator

但是在你的模型中,你已经定义了一个类方法。因此,为了使其工作,将指标方法定义为实例方法:

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

答案 2 :(得分:2)

您的迭代变量report用于遍历@reports的每个实例。使用self.indicator,您将声明一种类方法(通过self.name)。这样就可以调用Report.indicator。你想要的只是在一个Report实例上调用,所以你可以在模型中定义方法指示器,如下所示:

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

现在这应该有效!