Railsはそれuser_id
が外部キー参照であることをどのようにして知るのuser
ですか?
Rails自体user_id
は、それが外部キー参照であることを認識していませんuser
。最初のコマンドrails generate model Micropost user_id:integer
では、列を追加するだけですが、user_id
レールはcolの使用を認識していません。Micropost
モデルにラインを手動で配置する必要があります
class Micropost < ActiveRecord::Base
belongs_to :user
end
class User < ActiveRecord::Base
has_many :microposts
end
キーワードbelongs_to
とhas_many
これらのモデル間の関係を決定し、モデルuser_id
への外部キーとして宣言しUser
ます。
rails generate model Micropost user:references
後者のコマンドはモデルに行belongs_to :user
を追加し、Micropost
これにより外部キーとして宣言します。
前の方法を使用して外部キーを宣言するFYIは、モデル/テーブルの関係をRailsに知らせるだけです。データベースは関係について不明です。したがって、ソフトウェアを使用してEER図を生成するMySql Workbench
と、モデル間に関係スレッドが描画されないことがわかります。次の写真のように
ただし、後者の方法を使用すると、移行ファイルは次のようになります。
def change
create_table :microposts do |t|
t.references :user, index: true
t.timestamps null: false
end
add_foreign_key :microposts, :users
これで、外部キーがデータベースレベルで設定されました。適切なEER
図を生成できます。