неопределенный метод `new 'для Test: Module - PullRequest
3 голосов
/ 09 марта 2012

Здравствуйте, у меня проблема конфликта пространства имен.У меня есть модель: Тест и контроллер TestsController.сервер отображает ошибку

undefined method `new' for Test:Module

Я прочитал этот вопрос модели рельсов

добавлены в модель Тест в модуле UserTest

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

после прочтения я понял, что, вероятно, нужно добавить требование или включить контроллер.Только я не понимаю, как это сделать.пожалуйста, скажите мне.

Ответы [ 2 ]

11 голосов
/ 15 февраля 2014

Никогда не переименовывайте модель в одноименное название проекта.Вы получите сообщение, подобное этому:

undefined method `new' for Example:Module

Приоритет модуля проекта предшествует вызову.

4 голосов
/ 09 марта 2012

Соглашение в Rails заключается в преобразовании имени вашего класса в файл и имени вашего модуля в каталог.Поэтому, если вы поместите свой класс UserTest :: Test в файл test.rb в каталоге app / model, автозагрузка не сможет получить ваш класс.Потому что поиск по app/model/user_test/test.rb файлу.

Таким образом, вы можете «форсировать» требование в вашем контроллере, добавив требование в верхнюю часть вашего файла.Требование, если вы поместите свой класс в свой test.rb: require 'test.rb'

Чтобы понять, как определить ваше требование, подумайте, что LOAD_PATH вашего приложения добавляет каталог app/model.Таким образом, все внутри может быть добавлено напрямую, требуя имя каталога и имя файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...