我正在尝试调用我在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
(模型)中,它就可以了。
我不确定我做错了什么,因为从视图中访问模型是错误的,但这是唯一有用的。
我该如何解决这个问题? 感谢。
答案 0 :(得分:1)
您在控制器RecordsController
中放置了一个实例方法,但是您尝试在Record
类的实例上调用该方法。这根本没有意义。您的@records
个Record
个实例。你必须做类似的事情:
RecordsController.new.calc_cell_balance
但不要那样做!您的控制器只是指示需要完成的操作,并且不应该在控制器实例本身之外调用方法。
您的方法可能属于Record
模型,也可能属于帮助程序。从视图访问模型完全没有错。这是人们做的主要事情。如果你真的不想从视图中调用任何方法,你可以尝试收集控制器中的所有信息,如下所示:
@records = Record.all
@records_calc_cell_balance = @records.collect(&:calc_cell_balance)
然后你有并行的数据数组,但这只是愚蠢的。从视图中调用模型方法很好。或者,如果您觉得该方法过于以视图为中心(例如,您可能想要一种方法来告诉您要使用的CSS类),请将其放在视图助手中,这就是它的用途。