2015-06-01 6 views
1

У меня есть ошибка без объяснений.Ошибка миграции Activerecord на postgresql

Моя ошибка:

G::UndefinedColumn: ERROR: column "conjoncture_index_id" referenced in foreign key constraint does not exist 
: ALTER TABLE "reports" ADD CONSTRAINT "fk_rails_c25ad9a112" 
FOREIGN KEY ("conjoncture_index_id") 
    REFERENCES "conjoncture_indices" ("id") 

Моя миграция:

class AddColumnToReports < ActiveRecord::Migration 
    def change 
    add_reference :reports, :conjoncture_indice, index: true 
    add_foreign_key :reports, :conjoncture_indices 
    end 
end 

Моя создать таблицу миграции:

class CreateConjonctureIndices < ActiveRecord::Migration 
    def change 
    create_table :conjoncture_indices do |t| 
     t.date :date 
     t.float :value 

     t.timestamps null: false 
    end 
    end 
end 

Моя модель:

class ConjonctureIndice < ActiveRecord::Base 
    has_many :reports 
    by_star_field :date 
end 

Мой ConjonctureIndice shema.rb часть:

create_table "conjoncture_indices", force: :cascade do |t| 
    t.date  "date" 
    t.float "value" 
    t.datetime "created_at",     null: false 
    t.datetime "updated_at",     null: false 
    end 

Я ищу "conjoncture_index" в моем проекте, но ничего ... Я думаю, что старая версия проекта использует «conjoncture_index» вместо «conjoncture_indice», но все случаи удаляются.

+0

Можете ли вы опубликовать schema.rb части ConjonctureIndice –

+0

Я добавляю ее к своему сообщению –

+0

Я боюсь, что именование действительно является проблемой, кроме того, все выглядит нормально. Можете ли вы переименовать и проверить его? –

ответ

0

Хорошо, я нашел проблему. я думаю, что сообщение об ошибке такое же, как и раньше, но он ссылается на другую таблицу, называемую «trust_indices». Ошибка исходит от слова «indice». Когда я удаляю его, у меня нет проблем.

+0

Рад, что вы смогли Найди это . –

+0

большое спасибо –

5

В рельсах имена миграции являются множественными, тогда как названия моделей являются единственными. Таким образом, имя модели должно было быть индексом, но оно не может быть таким, как зарезервированное ключевое слово, множественное число которого преобразуется в ConjunctureIndices.

Примечание. Если у вас все еще есть сомнения, вы можете удалить и заново создать базу данных, но я подозреваю, что соглашение об именовании является проблемой в вашем случае.

+0

Я уже уничтожаю свою БД и воссоздаю ее –

+0

Переименуйте и снова перейдите, дайте мне знать, что произойдет потом. –

Смежные вопросы