2016-06-06 4 views
0

У меня есть две таблицы базы данных, называемые «точками» и «действиями». Я хочу дать таблицу «точек» внешний ключ «activity_id» пути создания ассоциаций следующим образом:Ruby on Rails не генерирует внешний ключ из ассоциации

class Activity < ActiveRecord::Base 
    belongs_to :user 
    has_many :points, dependent: :destroy 
    ... 
end 

и

class Point < ActiveRecord::Base 

    belongs_to :activity 

end 

Кроме того, у меня есть следующая Миграция файл для создания пункты таблицы:

class CreatePoints < ActiveRecord::Migration 
    def change 
    create_table :points do |t| 

     t.integer :activity_id 
     t.timestamps null: false 
     t.boolean :activities_completed, array: true, default: [] 
     t.integer :point_value 
     t.float :time_left  


    end 
    end 
end 

Однако, когда я бегу

rake db:reset 
rake db:migrate 
rake db:seed 

, а затем проверить пункты таблица по

rails c 
Point.column_names 

затем внешний ключ отсутствует:

irb(main):001:0> Point.column_names 
=> ["id", "created_at", "updated_at", "activities_completed", "point_value", "time_left"] 

Что я делаю неправильно? Что я могу сделать, чтобы сделать внешний ключ activity_id столбцом таблицы точек?

Я новичок в Ruby and Rails. Версия Rails - 4.24. Любая помощь приветствуется.

ответ

0

В результате миграции вашей таблицы создания должно быть указано «t.belongs_to: activity, index: true» вместо создания поля activity_id с типом integer.

+1

Спасибо! Я сделал это изменение. – Falk

0

Вы должны были сделать что-то подобное, чтобы добавить activity_id в таблицу точек.

t.references :activity, index: true, foreign_key: true 
#this would have created activity_id column in points 

С сегодняшнего дня, вы уже создали свои миграции и побежал rake db:migrate, учиться, чтобы удалить столбец из таблицы. Вам нужно написать миграцию, чтобы удалить activity_id из своей таблицы точек и добавить ее снова.

rails generate migration RemoveActivityIdFromPoints activity_id:integer 
rails g migration AddActivityRefToPoints activity:references 

Эти двое должны создавать для вас надлежащие миграции. Проверьте папку миграций для подтверждения того, что все прошло хорошо, и запустите rake db:migrate и повторите тест.

Перейдите по этой ссылке, чтобы узнать больше об этом. http://guides.rubyonrails.org/active_record_migrations.html

+0

Спасибо вам большое! – Falk

0

Я обнаружил, что возникла более фундаментальная проблема. Сценарий миграции не выполнялся во время rake db: migrate. Поэтому изменения, внесенные мной в миграцию, были неэффективными. Поэтому мне пришлось использовать

rake db:migrate:redo VERSION=20160605234351 

Когда я запустил эту команду, появился внешний ключ.

+0

Рад, что это сработало! – Kumar

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