我的控制器调用方法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
&#39;杆&#39;调用方法foo
,它在我的ApplicationHelper中定义:
module ApplicationHelper
def foo(arg1)
#do stuff
end
end
我在我的控制器和模型中都包含了ApplicationHelper,但是我收到了这个错误:
NoMethodError in CompsController#quick_create
undefined method `foo' for Matview(Table doesn't exist):Class
为什么?
答案 0 :(得分:1)
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
在这种情况下,像你写的实例方法应该可以工作。