无法从索引视图中调用实例方法

时间:2014-07-14 17:09:23

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

我正在尝试调用我在index.html.erb视图中在控制器中定义的方法(实例方法)。

records_controller.rb:

def calc_cell_balance
   4
end

index.html.erb:

<% @records.each do |r| %>
  <%= r.calc_cell_balance %><br>
<% end %>

我收到此错误:

undefined method `calc_cell_balance' for #<Record:0x35d18d8>

我不想让它成为一个类方法,因为它的设计很糟糕。 如果我将方法定义放在record.rb(模型)中,它就可以了。

我不确定我做错了什么,因为从视图中访问模型是错误的,但这是唯一有用的。

我该如何解决这个问题? 感谢。

1 个答案:

答案 0 :(得分:1)

您在控制器RecordsController中放置了一个实例方法,但是您尝试在Record类的实例上调用该方法。这根本没有意义。您的@recordsRecord个实例。你必须做类似的事情:

RecordsController.new.calc_cell_balance

但不要那样做!您的控制器只是指示需要完成的操作,并且不应该在控制器实例本身之外调用方法。

您的方法可能属于Record模型,也可能属于帮助程序。从视图访问模型完全没有错。这是人们做的主要事情。如果你真的不想从视图中调用任何方法,你可以尝试收集控制器中的所有信息,如下所示:

@records = Record.all
@records_calc_cell_balance = @records.collect(&:calc_cell_balance)

然后你有并行的数据数组,但这只是愚蠢的。从视图中调用模型方法很好。或者,如果您觉得该方法过于以视图为中心(例如,您可能想要一种方法来告诉您要使用的CSS类),请将其放在视图助手中,这就是它的用途。