46

私はレールにまったく慣れていないので、運が悪くて一晩中これを解決しようとしています。

usersbusinesses、およびの3 つのモデルを作成しましbusiness_hoursた。business_hours belongs_to businesses which belongs_to users関連 ( ) と ( )も追加しましたuser has_one business which has_many business_hours

ドキュメントをオンラインで読むと、これらの関係の外部キーを DB テーブルに作成する必要があるようです。Rails ActiveRecord マイグレーションを使用してこれを行うにはどうすればよいですか? DB として PostgreSQL を使用しています。

4

4 に答える 4

73

これについて現在受け入れられている回答は、データベースの外部キーを追加しないため、正確ではありません。整数列を追加するだけです。

Rails 4.2.xでは、現在のアプローチは次のとおりです。

http://guides.rubyonrails.org/active_record_migrations.html#foreign-keys

移行を作成します。

rails generate migration migration_name

既存の列の場合、移行で次のように外部キーを追加します。

class MigrationName < ActiveRecord::Migration
  def change
    add_foreign_key :business_hours, :businesses
    add_foreign_key :businesses, :users
  end
end

Rails 4.xの場合、または新しい列を追加してそれを外部キーにしたい場合は、これを行うことができます。おそらく、インデックスを true として指定することもできますが、それは外部キーの要件の一部ではありません:

http://edgeguides.rubyonrails.org/active_record_migrations.html#creating-a-migration

class MigrationName < ActiveRecord::Migration
  def change
    add_reference :business_hours, :business, index: true, foreign_key: true
    add_reference :businesses, :user, index: true, foreign_key: true
  end
end
于 2015-08-07T16:00:14.223 に答える
35

まず、belongs_to メソッドを使用するときsは、単語の最後に使用しないでください: business_hours belongs_to business which belongs_to user

次に、移行を作成します。

rails generate migration migration_name

移行では、列を追加します。

class MigrationName < ActiveRecord::Migration
  def change
    add_foreign_key :business_hours, :businesses
    add_foreign_key :businesses, :users
  end
end

実行しますrake db:migrate。それでおしまい。

于 2013-04-27T21:48:16.823 に答える