has_many&在postgres中使用外键和数据库约束进行了belongs_to迁移?

时间:2011-08-25 21:30:46

标签: ruby-on-rails-3 rails-migrations rails-postgresql

我搜索了几个有关迁移及其答案的问题,但我找不到令人满意的解决方案。

我想使用简单的has_many和belongs_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 个答案:

答案 0 :(得分:4)

使用优秀的foreigner gem在迁移中添加外键:

add_foreign_key :posts, :users
add_foreign_key :comments, :users
add_foreign_key :comments :posts