«NameError: неинициализированная константа» при попытке включить проблему в модель Rails - PullRequest
0 голосов
/ 26 января 2019

Я пытаюсь включить Concern в объект Rails ApplicationRecord.

Вот файл модели: /app/models/item.rb

class Item < ApplicationRecord
  include Items::Validating
end

Вот файл проблемы: /app/models/concerns/items/validating.rb

module Items
  module Validating

    extend ActiveSupport::Concern
    included do
      before_create :set_defaults
      validates :status, presence: true
      validates :user_id, presence: true
      validates :day, presence: true
    end

    def set_defaults
      self.status ||= 'active'
      self.day ||= Date.today
    end

  end
end

Когда я пытаюсь запустить тесты, я получаю следующую ошибку:

$ rails t

Error:
SessionsControllerTest#test_should_destroy_session:
NameError: uninitialized constant Item::Items
    app/models/item.rb:3:in `<class:Item>'
    app/models/item.rb:1:in `<main>'

Это странно, потому что я включаю проблемы с моделью User, и она работает совершенно нормально. Я не могу понять, что здесь отличается.


Обновление: нет ошибок при запуске сервера или консоли, это только при запуске тестов. Вот файл SessionsControllerTest:

require 'test_helper'

class SessionsControllerTest < ActionDispatch::IntegrationTest
  setup do
    @session = sessions(:one)
  end

  test "should fail to create session because of no email" do
    assert_difference('Session.count', 0) do
      post sessions_url, params: { email: 'no-email-found@no-email.com', password: 'password_hashed' }
    end

    assert_redirected_to login_url
  end

  test "should fail to create session because of no password" do
    assert_difference('Session.count', 0) do
      post sessions_url, params: { email: 'jerry@vandalay.com', password: 'password_hashed_wrong' }
    end

    assert_redirected_to login_url
  end

  test "should create session" do
    email = 'jerry@vandalay.com'
    assert_difference('Session.count') do
      post sessions_url, params: { email: email, password: 'password_hashed' }
    end

    user = User.first_with_email(email)
    assert_redirected_to dashboard_url
  end

  test "should destroy session" do
    get logout_url

    assert_redirected_to login_url
  end

end
...