Фабрика Bot ассоциируется с пространством имен модели - PullRequest
0 голосов
/ 01 октября 2018

При попытке создания ассоциаций пространства имен Factorybot не регистрирует пространство имен, а использует свое собственное, несмотря на то, что определяет его точно так же, как документация (и каждый поток в SO говорит).

Модель Admin::TicketCategory

class Admin::TicketCategory < ApplicationRecord has_many :tickets end

И его фабрика:

FactoryBot.define do
  factory :ticket_category, class: Admin::TicketCategory do |f|
    f.text { Faker::Commerce.product_name }
  end
end

Модель Ticket:

class Ticket < ApplicationRecord
  belongs_to :user
  belongs_to :service_rep, class_name: 'User', foreign_key: :user_id
  belongs_to :ticket_category
  belongs_to :ticket_status
  belongs_to :ticket_urgency
  has_many :ticket_comments
end

И ее фабрика:

FactoryBot.define do
  factory :ticket do |f|
    f.user
    f.ticket_category
    f.subject { Faker::Lorem.sentence }
    f.body { Faker::Lorem.paragraph }
    f.ticket_urgency { admin_ticket_urgency }
    f.ticket_status { admin_ticket_status }
    f.service_rep { user }
  end
end

Когда я пытаюсь проверить модель Ticket, появляется эта ошибка:

  1) Ticket has a valid factory
 Failure/Error: expect(FactoryBot.create(:ticket)).to be_valid

 NameError:
   uninitialized constant Ticket::TicketCategory

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 01 октября 2018

Вот как работает rails, когда дело доходит до моделей с пространством имен: он попытается найти связанную модель в текущем пространстве имен.

Давайте начнем с определенных вами ассоциаций:

In Admin::TicketCategory должно иметь has_many: tickets, class_name: "Ticket" (при условии, что у вас ticket_category_id в Ticket модели).И в вашей Ticket модели у вас должно быть belongs_to: ticket_category, class_name: "Admin::TicketCategory.

Этого должно быть достаточно, чтобы она заработала

...