Я создаю систему для создания пробных пабов для пабов. Чтобы паб не получал одну и ту же викторину дважды, пабы и викторины имеют много-много ассоциаций.ArgumentError: undefined class/module HABTM_Pubs in Rails 4
class Quiz < ActiveRecord::Base
has_and_belongs_to_many :pubs
serialize :rounds, Array
before_create :generate_rounds
def generate_rounds
# Round class initializes with array of pubs
NUMBER_OF_ROUNDS.times { rounds << Round.new(pubs: self.pubs) }
end
end
class Pub < ActiveRecord::Base
has_and_belongs_to_many :quizzes
end
Тест имеет раундов (массив круглых объектов, которые содержат вопросы), которые упорядочиваются с помощью метода ActiveRecord serialize
.
Когда я запускаю этот код:
q = Quiz.new
q.pubs << Pub.create
q.save
я получил:
ArgumentError: undefined class/module HABTM_Pubs
Раньше я имел belongs_to отношения (викторина принадлежала к одному пабу), и эта ошибка не возникает.
Когда я комментирую обратный вызов before_create
(так что раунды не создаются), действие q.save
преуспевает.
Из моих schema.rb
create_table "pubs_quizzes", id: false, force: true do |t|
t.integer "pub_id"
t.integer "quiz_id"
end
вещи как Quiz.new.pubs
работы.
Edit: трассировка стека
from /home/geert/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/psych/class_loader.rb:53:in `path2class'
from /home/geert/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/psych/class_loader.rb:53:in `resolve'
from /home/geert/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/psych/class_loader.rb:45:in `find'
from /home/geert/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/psych/class_loader.rb:27:in `load'
from /home/geert/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/psych/visitors/to_ruby.rb:360:in `resolve_class'
from /home/geert/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/psych/visitors/to_ruby.rb:87:in `deserialize'
from /home/geert/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/psych/visitors/to_ruby.rb:122:in `visit_Psych_Nodes_Scalar'
from /home/geert/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/psych/visitors/visitor.rb:15:in `visit'
from /home/geert/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/psych/visitors/visitor.rb:5:in `accept'
from /home/geert/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/psych/visitors/to_ruby.rb:31:in `accept'
from /home/geert/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/psych/visitors/to_ruby.rb:302:in `block in revive_hash'
from /home/geert/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/psych/visitors/to_ruby.rb:300:in `each'
from /home/geert/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/psych/visitors/to_ruby.rb:300:in `each_slice'
from /home/geert/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/psych/visitors/to_ruby.rb:300:in `revive_hash'
from /home/geert/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/psych/visitors/to_ruby.rb:161:in `visit_Psych_Nodes_Mapping'
from /home/geert/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/psych/visitors/visitor.rb:15:in `visit'
Он должен иметь что-то делать с сериализации.
Релевантный товар? YAML::load raises undefined class/module error
Вы создали совместный стол? с id как ложным, ему требуется реализовать Has и принадлежит многим отношениям в rails. –
Да, разве это не признано? Я подозреваю, что это неправильно с сериализацией где-то. Я обновил оригинальный пост. – Kappie001
Я обновил сообщение с помощью трассировки стека. Вся помощь была оценена. – Kappie001