###状況
店舗情報を持つshopモデルと地域情報を持つareaモデルがあります。
shopモデルとareaモデルの2つを持っていて、それらはリレーションされています。
エリアのマスタデータはgemでactive_hashを使っています。
# マスタデータ gem 'active_hash'
# shopモデル extend ActiveHash::Associations::ActiveRecordExtensions belongs_to_active_hash :area
# areaモデル include ActiveHash::Associations has_many :shops self.data = [ {:id => 1, :name => "エリア1"}, {:id => 2, :name => "エリア2"}, ]
それでアソシエーションさせるためにshopsテーブルにarea_idを持たせました。
def change add_column :shops, :area_id, :integer end add_index :shops, [:area_id]
次にareaモデルを作成。
$ rails g model Area name:string
$ rake db:migrate
そして、ローカル開発環境(sqlite)できちんと動作することを確認しました。
###capistranoでデプロイがコケる
ローカルで動いたので本番環境(mysql)にデプロイしようとしたら「deploy:migrating」の部分でエラーになってしまいました。
たくさんのエラーメッセージが表示されたのですが、おそらく原因と思われるメッセージが下記になります。
ActiveRecord::StatementInvalid: Mysql2::Error: Key column 'area_id' doesn't exist in table: CREATE INDEX `index_shops_on_area_id` ON `shops` (`area_id`)
Mysql2::Error: Key column 'area_id' doesn't exist in table
要は、table(shopsテーブル?)に「area_id」が存在しないよ!というメッセージです。
しかし、最初に書いたようにきちんと外部キーの「area_id」を追加してマイグレーションしました。
schema .rbにもきちんと存在しています。
create_table "shops", force: :cascade do |t| t.integer "area_id" end
このエラーの原因や意味がわからなく困ってます。
誰かわかる人HELPおねがいします!
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。