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

ale*_*hka 3 ruby-on-rails ruby-on-rails-3

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

undefined method `new' for Test:Module
Run Code Online (Sandbox Code Playgroud)

我读过这个问题的rails模型

在模块UserTest中添加到模型Test中

module UserTest
  class Test < ActiveRecord::Base
  ....
  end
end
Run Code Online (Sandbox Code Playgroud)

并添加到控制器

class TestsController < ApplicationController

  def new
    @test = UserTest::Test.new
    @test.questions.build
    @title = "New test"
  end
 ...
end
Run Code Online (Sandbox Code Playgroud)

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

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

Osw*_*ira 11

切勿将模型重命名为项目的同名.您将收到如下消息:

undefined method `new' for Example:Module
Run Code Online (Sandbox Code Playgroud)

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


shi*_*ara 6

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

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

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