12

Вопрос по postgresql-9.1, postgresql, ruby-on-rails – «PG :: UndefinedTable: ERROR: отношение не существует» с правильными именами и соглашениями Rails

Я читал много таких потов, но все решения, которые я видел, находятся в номенклатуре моделей, именования и соглашения Rails.

Теперь у меня есть эта проблема, когдаЯ впервые запускаю в производственной среде в PostgreSQL 9.1

    rake db:migrate RAILS_ENV=production

или же

    rake db:schema:load RAILS_ENV=production 

Я мог бы создать базу данных без проблем:rake db:create RAILS_ENV=production => OK

Ошибка

rake aborted!
PG::UndefinedTable: ERROR:  relation "categories" does not exist
LINE 5:                WHERE a.attrelid = '"categories"'::regclass
                                          ^
:               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 = '"categories"'::regclass
                 AND a.attnum > 0 AND NOT a.attisdropped
               ORDER BY a.attnum

И модели следуют всем соглашениям об именах Rails. Так что я не знаю, что говорит мне эта ошибкаSomething Есть что-то еще, что может вызвать эту ошибку?

Модели:

class Category < ActiveRecord::Base
  has_many :subcategories
end

class Subcategory < ActiveRecord::Base
  belongs_to :category
end

shema.rb:

ActiveRecord::Schema.define(version: nnnn) do

  # These are extensions that must be enabled in order to support this database
  enable_extension "plpgsql"

  create_table "categories", force: true do |t|
    t.string   "name"
    t.text     "comments"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.decimal  "amount_need_comments",           precision: 6, scale: 2
    t.decimal  "amount",                         precision: 6, scale: 2
    t.decimal  "amount_per_unit",                precision: 6, scale: 2
    t.integer  "teletrabajo",          limit: 2,                         default: 0, null: false
    t.decimal  "amount_need_city",               precision: 6, scale: 2
  end

  create_table "subcategories", force: true do |t|
    t.string   "name"
    t.text     "comments"
    t.integer  "category_id"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.decimal  "amount_need_comments", precision: 6, scale: 2
    t.decimal  "amount",               precision: 6, scale: 2
    t.decimal  "amount_per_unit",      precision: 6, scale: 2
    t.decimal  "amount_need_city",     precision: 6, scale: 2
  end

И наконец, я попробовал что-то подобное, но безуспешно

inflections.rb

ActiveSupport::Inflector.inflections do |inflect|
  inflect.irregular 'category', 'categories'
  inflect.irregular 'subcategory', 'subcategories'

  inflect.plural 'category', 'categories'
  inflect.plural 'subcategory', 'subcategories'
end

И удалите отношения участвующих моделей, как это:

class ExpenseDetail < ActiveRecord::Base
  # belongs_to :expense
  # belongs_to :category
  # belongs_to :subcategory

  default_scope :order=>"id"

  validate :expense_date...

...

Я не мог решить для «rake db: миграции» или «rake db: schema: load». Я сделал резервную копию базы данных разработки и восстановил ее в рабочей базе данных. Но в обоих случаях моя база данных PGSql (разработка и производство) предназначена для разработки, так как я не рисковал.

от Albert Català

Привет Альберт, ты когда-нибудь нашел решение для этого? У меня очень похожая проблема, и через 3 дня я все еще не могу разобраться! Что ты сделал? Спасибо

от jfdimark

Извините .. но это двойные кавычки в ошибке, но не в моем коде. Мне нужно найти в моем коде, что не так

от Albert Català

Да, я вижу, но я не понимаю, что это значит. В чем дело?

от Albert Català
2 ответа
7

У меня та же проблема

и я обнаружил, что в моих миграциях у меня нет имен таблиц во множественном числе:

Например:



    class CreatePosts  ActiveRecord::Migration
      def change
        create_table :posts do |t|
          t.string :source
          t.string :destination
          t.datetime :time
          t.timestamps
        end
      end
    end


я имеюcreate_table :post, но когда я изменяю это наcreate_table :posts, Это начинает работать !!!!

Это не мой случай, у меня во множественном числе: create_table: подкатегории do | t | возможно проблема была в t.references: категория

от Albert Català
2

Я снова столкнулся с собственной ошибкой !! при выполненииrake db

Я снова столкнулся с собственной ошибкой !! при выполненииrake test, но в этом случае благодаряcedricdlb я обнаружилВот решение, довольно просто:

rake db:test:prepare
rake db:test:load

Похожие вопросы