Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Mailboxer: cannot destroy object

I am trying to destroy an object within my ROR app.

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.

I'm using Rails 4.2 and:

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

like image 964
Augustin Riedinger Avatar asked Jan 31 '17 11:01

Augustin Riedinger


2 Answers

Is there a migration file I somehow missed?

Yes, see itsnikolay's answer and the Upgrading section of the documentation.

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. 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.

like image 66
wjordan Avatar answered Nov 10 '22 11:11

wjordan


It looks like you use previous version of 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

like image 26
itsnikolay Avatar answered Nov 10 '22 12:11

itsnikolay