ruby-on-rails
  • mailboxer
  • 2017-01-31 17 views 6 likes 
    6

    RORアプリケーション内のオブジェクトを破棄しようとしています。Mailboxer:オブジェクトを破棄できません

    しかし、私は次のエラーを取得する:

    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' 
    

    私はこれは私が私のアプリの中にはありません。このmailboxer_conversation_opt_outsテーブルに関連している推測しています。

    私はRailsの4.2を使用しています:

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

    は私が何とか逃し移行ファイルはありますか?

    とにかく、実際のオブジェクトがメッセージを送信できないうちに、どのように私のオブジェクトがこのテーブルに接続されますか?

    ありがとうございます。

    +1

    'rake db:migrate'を実行しましたか? 'schema_migrations'テーブルに' 20131206080416_add_conversation_optout'がありますか? –

    +0

    いいえ。私はこの移行が追加されたと推測しています*後にメールボックスを最初に設定しました(〜3年前)、そうですか?私はこれに追いつくはずですか? –

    +0

    あなたの 'schema_migrations'テーブルにその移行が存在するかどうかを確認します。私のローカルでは、dbを落として再作成し、再度移行を実行し、それが解決したかどうかを確認します。 –

    答えて

    2

    以前のバージョンのメールボックスを使用しているようです。

    は新しいものに移行しよう:

    ドキュメントから撮影
    $ rails generate mailboxer:namespacing_compatibility 
    $ rails generate mailboxer:install -s 
    $ rake db:migrate 
    

    https://github.com/mailboxer/mailboxer#upgrading

    +0

    彼は既に '0.13.0' –

    4

    Is there a migration file I somehow missed?

    はい、itsnikolay's answerおよびドキュメントのUpgradingセクションを参照してください。

    Anyway, how come my object is connected to this table while the actual object cannot send messages?

    モデルクラスはおそらくまだあなたのActiveRecordクラス、お使いのモデルのdeclares several extra associationsMailboxer::Models::Messageableモジュールが含まれてacts_as_messageableメソッドを呼び出しています。 Mailboxerのアップグレードを気にせず、モデルをMailboxerから完全に切断したい場合は、acts_as_messageable行を削除するだけで、関連付けに失敗した場合でもレコードを破棄することができます。

    関連する問題