为什么我的视图支持的模型没有读取模块?



我的控制器调用该方法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类上调用级别方法。

但是foobar都是实例方法定义。若要使它们成为类方法,需要def self.bar(arg)def self.foo(arg1)

要将类方法放入 ActiveRecord 模型中,您需要extend,而不是include模块:

class MatView < ActiveRecord::Base
  extend ApplicationHelper
end

或者,如果这听起来不像你打算做的,那么也许你打算做:

Matview.new.bar @projects

在这种情况下,像您编写的实例方法应该可以工作。

最新更新