3

移行に関するいくつかの質問とその回答を検索しましたが、満足のいく解決策が見つかりませんでした。

次のような単純な 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

私はまだよりエレガントな解決策を見つけたいと思っています。多分それのための宝石があります。

4

1 に答える 1

4

優れた外国人の宝石を使用して、移行に外部キーを追加します。

add_foreign_key :posts, :users
add_foreign_key :comments, :users
add_foreign_key :comments :posts
于 2011-09-03T05:00:44.410 に答える