has_many & own_to миграция с внешними ключами и ограничениями базы данных в postgres? - PullRequest
3 голосов
/ 26 августа 2011

Я искал несколько вопросов о миграции и их ответах, но не нашел удовлетворительного решения.

Я хочу использовать простые отношения has_many и own_to, например

class User < ActiveRecord::Base
  has_many :posts
  has_many :comments
end

class Post < ActiveRecord::Base
  belongs_to :user
  has_many :comments
end

class Comment < ActiveRecord::Base
  belongs_to :post
  belongs_to :user
end

Есть ли возможность создать ограничения уровня базы данных внутри миграции, такие как

post_id integer REFERENCES posts

или мне придется делать это вручную? В лучшем случае я бы предпочел независимое от базы данных решение. Заранее спасибо!

Редактировать: В настоящее время я использую Postgresql, но мне нравится проявлять гибкость в отношении базовой базы данных.

Обновление: Ради кода, независимого от базы данных, сейчас я придерживаюсь следующей миграции:

class AddRelations < ActiveRecord::Migration
  def self.up
    add_column :posts, :user_id, :integer, :null => false
    add_column :comments, :user_id, :integer, :null => false
    add_column :comments, :post_id, :integer, :null => false
  end

  def self.down
    remove_column :posts, :user_id
    remove_column :comments, :user_id
    remove_column :comments, :post_id
  end
end

Я все еще надеюсь найти более элегантное решение. Может быть, для этого есть драгоценный камень.

1 Ответ

4 голосов
/ 03 сентября 2011

Используйте превосходный камень иностранец , чтобы добавить внешние ключи в вашу миграцию:

add_foreign_key :posts, :users
add_foreign_key :comments, :users
add_foreign_key :comments :posts
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...