🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

1回答

906閲覧

【ruby on rails】 既存のテーブルに外部キーを追加して、親テーブルと子テーブルを連携させたい。

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2020/12/27 01:42

hmhrpracticesテーブルに外部キーを追加するために下記のコードを書いているのですが、追加できません(rails dbconsoleで.shcemaを実行しても追加されません)。
何が悪いのかご教示いただけますと幸いでございます。
恐れ入りますが、ご確認のほどよろしくお願いいたします。

●外部キーを追加したい理由
掲示板を作っており、下記のような機能を実装したいため。
①異なるジャンルごとのページで、ユーザーが投稿を行う。
②各ジャンルでの投稿が、TOPページで「新着投稿」として一箇所でまとめて表示される。

●試したこと
migrateフォルダ内で下記の通り、
「add_reference :hmhrpractices, :practice, foreign_key: true」を入力しております。

migrate

1class CreateHmhrpractices < ActiveRecord::Migration[5.2] 2 def change 3 create_table :hmhrpractices do |t| 4 t.string :name 5 t.string :title 6 t.text :content 7 8 9 t.timestamps 10 end 11 add_reference :hmhrpractices, :practice, foreign_key: true 12 end 13end

model

1class Hmhrpractice < ApplicationRecord 2 belongs_to :practice 3 4 validates :name, presence: true 5 validates :title, presence: true 6 validates :content, presence: true 7end 8

model

1class Practice < ApplicationRecord 2 has_many :hmhrpractices, dependent: :destroy 3end 4

schema

1CREATE TABLE IF NOT EXISTS "practices" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar, "title" varchar, "content" text, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL); 2CREATE TABLE sqlite_sequence(name,seq); 3CREATE TABLE IF NOT EXISTS "hmhrpractices" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar, "title" varchar, "content" text, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL); 4 5↑ここのhmhrpracticesテーブルに、外部キーをつけて、practicesと連携させたいです。 6hmhrpracticesテーブルにユーザーが投稿を行うと、practicesテーブルにも反映されるという機能をつくりたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

Tableに外部キーのカラム自体は追加されていますか?

それがなければ、他Tableとの連携は出来ないということになります。

DBに入ってテーブルを出力し、カラムを見てみて追加されていれば問題ないですが、そもそも外部キーのカラムが無いような気がしています。

投稿2020/12/27 07:11

educ_gt

総合スコア282

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/12/27 23:23

ご回答いただき、誠にありがとうございます。 カラムは追加しておりませんでした。。 外部キーのカラムを追加し、できたのですが、親テーブルと子テーブルを連携することができません。 ●試したこと ①hmhrpracticesテーブル(子)に、practiceテーブル(親)と連携させるための外部キー「practice_id」カラムを追加いたしました。 ②新しいmigrateファイルを作成して、下記の入力を行い、「rails db:migrate」を実施いたしました。 ``` class AddHmhrpractices < ActiveRecord::Migration[5.2] def change add_column :hmhrpractices, :practice_id, :integer add_reference :hmhrpractices, :practice, foreign_key: true end end ``` 以上のような状況なのですが、不足している点をご教示いただけますと幸いでございます。 恐れ入りますが、何卒よろしくお願いいたします。
educ_gt

2020/12/30 14:59

ありがとうございます。 add_reference :hmhrpractices, :practice, foreign_key: true add_column :hmhrpractices, :practice_id, :integer これどちらか一つでよさそうです。 その上で、一度DBをリセットして、再作成したらいかがでしょうか。 DBごとでよければ、rails db:reset、rails db:migrate を続けて打てばいけそうです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問