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

时间:2014-11-14 01:11:09

标签: ruby-on-rails

我的控制器调用方法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

为什么?

1 个答案:

答案 0 :(得分:1)

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

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