Railsで他テーブルに紐づいたデータをSeedファイルに記載する方法

Mentor

今日もRailsで発生した問題の対処方法とTipsです。

Railsで他テーブルに紐づいたデータをSeedファイルに記載する方法

ポートフォリオのためにpostテーブルに投稿データを初期データとして登録しておきたい場合、postテーブルにはuserが必用です。

seedファイルもrubyのコードを記述することができます。

という前提に立つと、userが作成されている場合は

user1 = User.find(1)
Post.create(user: user1, title: "タイトル", body: "本文")

と記述すればuser1に紐づいた投稿データを登録することができます。

もちろんRubyのコードなのでif文で分岐することも可能です。

user1 = nil
if User.find_by(id: 1) == nil
  user1 = User.create(email: "test@example.com", password: "password")
else
  user1 = User.find(1)
end
Post.create(user: user1, title: "タイトル", body: "本文")

 

AWSでMigrate時にMysql2::Error: Specified key was too long; max key length is 767 bytesが出た場合の対処方法

AWSでRDSのmysqlにmigrateするときにこのエラーが発生した場合の対処方法になります。

対処方法としてはparameter groupの設定値が間違っている可能性が高いです。

 

これはstring型のサイズ制限を大きくする設定がされていないために発生しています。

下記の設定があっているか確認しましょう。特にinnodb_large_prefixが1になっていないことが原因と考えられます。

character_set_client
character-set-client-handshake
character_set_connection
character_set_database
character_set_filesystem
character_set_results
character_set_server
skip-character-set-client-handshake
innodb_file_format
innodb_file_per_table
innodb_large_prefix

またinnodb_large_prefixが1の場合、character_setはutf8mb4である必用があります。

 

コメント

タイトルとURLをコピーしました