我的控制器调用该方法bar
:
class CompsController < ApplicationController
include ApplicationHelper
def quick_create
@var = Matview.bar @projects
end
end
bar 是在表示我的数据库中的物化视图的模型中定义的(它不在我的架构中):
class MatView < ActiveRecord::Base
include ApplicationHelper
table_name = 'mat_views'
def self.bar(arg)
foo arg
end
end
'bar' 调用方法 foo
,它在我的应用程序助手中定义:
module ApplicationHelper
def foo(arg1)
#do stuff
end
end
我已经在我的控制器和模型中都包含了应用程序助手,但是我收到此错误:
NoMethodError in CompsController#quick_create
undefined method `foo' for Matview(Table doesn't exist):Class
为什么?
Matview.bar @projects
正在MatView
类上调用类级别方法。
但是foo
和bar
都是实例方法定义。若要使它们成为类方法,需要def self.bar(arg)
或def self.foo(arg1)
要将类方法放入 ActiveRecord 模型中,您需要extend
,而不是include
模块:
class MatView < ActiveRecord::Base
extend ApplicationHelper
end
或者,如果这听起来不像你打算做的,那么也许你打算做:
Matview.new.bar @projects
在这种情况下,像您编写的实例方法应该可以工作。