测试的未定义方法`new':模块

时间:2012-03-09 08:34:09

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

您好我有一个名称空间冲突的问题。我有一个模型:测试和控制器TestsController。服务器显示错误

undefined method `new' for Test:Module

我读了这个问题rails models

在模块UserTest

中添加到模型Test中
module UserTest
  class Test < ActiveRecord::Base
  ....
  end
end

并添加到控制器

class TestsController < ApplicationController

  def new
    @test = UserTest::Test.new
    @test.questions.build
    @title = "New test"
  end
 ...
end

服务器显示错误:uninitialized constant TestsController::UserTest

阅读更多后,我意识到可能需要添加require或包含一个控制器。只有我不明白该怎么做。请告诉我。

2 个答案:

答案 0 :(得分:9)

永远不要将模型重命名为项目的同名。您将收到如下消息:

undefined method `new' for Example:Module

项目模块优先级在呼叫之前。

答案 1 :(得分:4)

Rails中的约定是将文件中的类名和目录中的模块名转换。因此,如果将UserTest :: Test类放在app / model目录中的test.rb文件中,则自动加载无法获取您的类。因为搜索app/model/user_test/test.rb文件。

因此,您可以通过在文件顶部添加require来“强制”控制器中的require。如果您将课程放入test.rb,则需要:require 'test.rb'

要知道如何定义您的需求是认为应用程序的LOAD_PATH添加app/model目录。因此,所有内部都可以通过要求目录名和文件名直接添加。