简体   繁体   English

邮箱:不能破坏对象

[英]Mailboxer: cannot destroy object

I am trying to destroy an object within my ROR app. 我试图在我的ROR应用程序中销毁一个对象。

But I get the following error: 但是我收到以下错误:

ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR:  relation "mailboxer_conversation_opt_outs" does not exist
LINE 5:                WHERE a.attrelid = '"mailboxer_conversation_o...
                                          ^
:               SELECT a.attname, format_type(a.atttypid, a.atttypmod),
                     pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod
                FROM pg_attribute a LEFT JOIN pg_attrdef d
                  ON a.attrelid = d.adrelid AND a.attnum = d.adnum
               WHERE a.attrelid = '"mailboxer_conversation_opt_outs"'::regclass
                 AND a.attnum > 0 AND NOT a.attisdropped
               ORDER BY a.attnum

    from /app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/postgresql_adapter.rb:592:in `async_exec'
    from /app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/postgresql_adapter.rb:592:in `block in exec_no_cache'
    from /app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/abstract_adapter.rb:472:in `block in log'
    from /app/vendor/bundle/ruby/2.2.0/gems/activesupport-4.2.5.1/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
    from /app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/abstract_adapter.rb:466:in `log'
    from /app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/postgresql_adapter.rb:592:in `exec_no_cache'
    from /app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/postgresql_adapter.rb:584:in `execute_and_clear'
    from /app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:160:in `exec_query'
    from /app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/postgresql_adapter.rb:733:in `column_definitions'
    from /app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/postgresql/schema_statements.rb:186:in `columns'
    from /app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/schema_cache.rb:43:in `columns'
    from /app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/schema_cache.rb:49:in `columns_hash'
    from /app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.5.1/lib/active_record/associations/association_scope.rb:85:in `column_for'
    from /app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.5.1/lib/active_record/associations/association_scope.rb:94:in `bind'
    from /app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.5.1/lib/active_record/associations/association_scope.rb:103:in `last_chain_scope'
    from /app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.5.1/lib/active_record/associations/association_scope.rb:139:in `add_constraints'
... 72 levels...
    from /app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.5.1/lib/active_record/transactions.rb:281:in `block in destroy'
    from /app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.5.1/lib/active_record/transactions.rb:351:in `block in with_transaction_returning_status'
    from /app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/abstract/database_statements.rb:213:in `block in transaction'
    from /app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/abstract/transaction.rb:184:in `within_new_transaction'
    from /app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/abstract/database_statements.rb:213:in `transaction'
    from /app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.5.1/lib/active_record/transactions.rb:220:in `transaction'
    from /app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.5.1/lib/active_record/transactions.rb:348:in `with_transaction_returning_status'
    from /app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.5.1/lib/active_record/transactions.rb:281:in `destroy'
    from (irb):5
    from /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.5.1/lib/rails/commands/console.rb:110:in `start'
    from /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.5.1/lib/rails/commands/console.rb:9:in `start'
    from /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.5.1/lib/rails/commands/commands_tasks.rb:68:in `console'
    from /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.5.1/lib/rails/commands/commands_tasks.rb:39:in `run_command!'
    from /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.5.1/lib/rails/commands.rb:17:in `<top (required)>'
    from bin/rails:4:in `require'

I'm guessing this is related to this mailboxer_conversation_opt_outs table I don't have within my app. 我猜这与我在我的应用程序中没有的mailboxer_conversation_opt_outs表有关。

I'm using Rails 4.2 and: 我正在使用Rails 4.2和:

mailboxer (0.13.0)
  carrierwave (>= 0.5.8)
  foreigner (>= 0.9.1)
  rails (>= 3.2.0)

Is there a migration file I somehow missed? 是否有我错过的迁移文件?

Anyway, how come my object is connected to this table while the actual object cannot send messages? 无论如何,当实际对象无法发送消息时,我的对象如何连接到此表?

Thanks 谢谢

Is there a migration file I somehow missed? 是否有我错过的迁移文件?

Yes, see itsnikolay's answer and the Upgrading section of the documentation. 是的,请参阅itsnikolay的答案和文档的Upgrading部分。

Anyway, how come my object is connected to this table while the actual object cannot send messages? 无论如何,当实际对象无法发送消息时,我的对象如何连接到此表?

Your Model class is probably still calling the acts_as_messageable method, which includes the Mailboxer::Models::Messageable Module into your ActiveRecord class, which declares several extra associations on your model. 您的Model类可能仍在调用acts_as_messageable方法,该方法将Mailboxer::Models::Messageable模块包含到ActiveRecord类中,该类在模型上声明了几个额外的关联 If you don't care about upgrading Mailboxer and just want to disconnect your model from Mailboxer entirely, just delete the acts_as_messageable line and you should be able to destroy your records without any more failed association issues. 如果您不关心升级Mailboxer并且只想完全断开您的模型与Mailboxer的连接,只需删除acts_as_messageable行,您就应该能够销毁您的记录而不会再出现任何失败的关联问题。

It looks like you use previous version of Mailboxer. 看起来您使用的是以前版本的Mailboxer。

Try to migrate on new one: 尝试迁移新的:

$ rails generate mailboxer:namespacing_compatibility
$ rails generate mailboxer:install -s
$ rake db:migrate

Taken from documentation: https://github.com/mailboxer/mailboxer#upgrading 取自文档: https//github.com/mailboxer/mailboxer#upgrading

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM