如何将模块混合到Rails 3控制器中

时间:2014-09-16 12:47:37

标签: ruby-on-rails ruby-on-rails-3 activesupport-concern

我有一个模块

module Foo
  def normalize name
    # modify and return
  end
end

我可以将它混合到一个模型中......

class Something
  include Foo
end

Something.new.normalize "a string" # works

尝试混合到控制器......

class SomeController < ApplicationController
  include Foo

  def some_action
    normalize "a string"
  end
end

SomeController#some_action#在功能测试中工作,但不在rails服务器中工作!

我尝试了各种形式的模块,扩展了ActiveSupport :: Concern,添加了一个包含的块并将normalize更改为类方法,但我得到了相同的结果。为什么这会在功能测试中起作用,但不在其外部?

我感觉我只是错过了一些简单的事情。

1 个答案:

答案 0 :(得分:3)

它&#34;工作的原因&#34;在测试中,测试还包括模块并调用normalize方法:

class SomeControllerTest < ActionController::TestCase
  include Foo

使控制器可以使用它...不知何故。

删除include Foo也使测试失败。

为了让控制器工作,我改变了

normalize "a string"

self.normalize "a string"