【发布时间】:2015-07-07 21:51:43
【问题描述】:
我不知道为什么会发生这个错误。 我正在使用 master repo 中的 rails 5。
ActiveRecord::Base.transaction do
q = Question.new({
... some random attrs
})
q.tests.build({
name: 'teste',
slug: 'teste',
year: 1990
})
q.save!
end
class Question < ActiveRecord::Base
has_and_belongs_to_many :tests, join_table: :tests_questions
end
class Test < ActiveRecord::Base
has_and_belongs_to_many :questions, join_table: :tests_questions
end
跟踪的某些部分:
ActiveRecord::RecordInvalid: Validation failed: Left side must exist
activerecord/lib/active_record/validations.rb:67:in `raise_validation_error'
activerecord/lib/active_record/validations.rb:43:in `save!'
activerecord/lib/active_record/attribute_methods/dirty.rb:29:in `save!'
activerecord/lib/active_record/transactions.rb:303:in `block in save!'
activerecord/lib/active_record/transactions.rb:374:in `block in with_transaction_returning_status'
activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb:210:in `transaction'
activerecord/lib/active_record/transactions.rb:210:in `transaction'
activerecord/lib/active_record/transactions.rb:371:in `with_transaction_returning_status'
activerecord/lib/active_record/transactions.rb:303:in `save!'
activerecord/lib/active_record/associations/has_many_through_association.rb:84:in `save_through_record'
activerecord/lib/active_record/associations/has_many_through_association.rb:47:in `insert_record'
activerecord/lib/active_record/autosave_association.rb:379:in `block in save_collection_association'
activerecord/lib/active_record/autosave_association.rb:370:in `each'
activerecord/lib/active_record/autosave_association.rb:370:in `save_collection_association'
activerecord/lib/active_record/autosave_association.rb:184:in `block in add_autosave_association_callbacks'
activerecord/lib/active_record/autosave_association.rb:157:in `instance_eval'
activerecord/lib/active_record/autosave_association.rb:157:in `block in define_non_cyclic_method'
activesupport/lib/active_support/callbacks.rb:428:in `block in make_lambda'
activesupport/lib/active_support/callbacks.rb:229:in `call'
activesupport/lib/active_support/callbacks.rb:229:in `block in halting_and_conditional'
activesupport/lib/active_support/callbacks.rb:502:in `call'
activesupport/lib/active_support/callbacks.rb:502:in `block in call'
activesupport/lib/active_support/callbacks.rb:502:in `each'
activesupport/lib/active_support/callbacks.rb:502:in `call'
activesupport/lib/active_support/callbacks.rb:90:in `run_callbacks'
activerecord/lib/active_record/callbacks.rb:305:in `_create_record'
activerecord/lib/active_record/timestamp.rb:57:in `_create_record'
activerecord/lib/active_record/persistence.rb:521:in `create_or_update'
activerecord/lib/active_record/callbacks.rb:301:in `block in create_or_update'
activesupport/lib/active_support/callbacks.rb:117:in `call'
activesupport/lib/active_support/callbacks.rb:117:in `call'
activesupport/lib/active_support/callbacks.rb:558:in `block (2 levels) in compile'
activesupport/lib/active_support/callbacks.rb:501:in `call'
activesupport/lib/active_support/callbacks.rb:501:in `call'
activesupport/lib/active_support/callbacks.rb:90:in `run_callbacks'
activerecord/lib/active_record/callbacks.rb:301:in `create_or_update'
activerecord/lib/active_record/suppressor.rb:41:in `create_or_update'
activerecord/lib/active_record/persistence.rb:151:in `save!'
activerecord/lib/active_record/validations.rb:43:in `save!'
activerecord/lib/active_record/attribute_methods/dirty.rb:29:in `save!'
activerecord/lib/active_record/transactions.rb:303:in `block in save!'
activerecord/lib/active_record/transactions.rb:374:in `block in with_transaction_returning_status'
activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb:210:in `transaction'
activerecord/lib/active_record/transactions.rb:210:in `transaction'
activerecord/lib/active_record/transactions.rb:371:in `with_transaction_returning_status'
activerecord/lib/active_record/transactions.rb:303:in `save!'
当我使用= 方法而不是build 时,活动记录只是忽略join_table,将表名选择为questions_tests 而不是tests_questions。
例如:
q.tests = [] of tests
NoMethodError: undefined method `questions_tests' for #<Question:0x0000000516b188>
【问题讨论】:
-
这有什么更新吗?谢谢
-
我刚刚更新了捆绑包,这个错误不再发生,但我现在收到一个枚举错误:
NoMethodError: undefined method 'each_with_index' for true:TrueClassrails-e18bf1dc4922/activerecord/lib/active_record/enum.rb:159:in 'block (2 levels) in enum' -
更新并没有解决我的问题。我开了一个issue
-
@masciugo,实际上,错误仍然存在,但枚举错误正在掩盖它(是的,一个新错误!¬¬)
标签: ruby-on-rails activerecord