質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Model

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

MVC

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

Ruby on Rails

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

Q&A

解決済

1回答

1375閲覧

中間テーブル 複数外部キー 保存

Meitoku

総合スコア44

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Model

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

MVC

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/09/23 07:31

編集2020/09/23 09:33

以下の中間テーブルに保存したいのですが、tweetを保存しても、中間テーブルに保存されません
アソシエーションが違っていると思うのですが、なかなかわかりません
違っていない場合は、違っていないと教えてください
よろしくお願いします

参考にした記事
中間テーブル

######category_tweetsテーブル

|id|school_a_id|school_b_id|tweet_id|
|:--|:--:|--:|
||||

schoolのidはcategoryテーブルのidを持ってこようと、マイグレーションを以下のように設定しています

class CreateCategoryTweets < ActiveRecord::Migration[5.2] def change create_table :category_tweets do |t| t.references :school_a,index: true, foreign_key: {to_table: :categories} t.references :school_b,index: true, foreign_key: {to_table: :categories} t.references :tweet, index: true, foreign_key: true t.timestamps end end end

それぞれの関係は以下のように組みました

######tweetモデル

class Tweet < ApplicationRecord //belongs_to :user has_many :category_tweets has_many :categories,through: :category_tweets has_many :comments end

######categoryモデル

class Category < ApplicationRecord //has_many :category_tweets has_many :tweets,through: :category_tweets has_ancestry has_many :school_a_category_tweets, foreign_key: 'school_a_id' has_many :school_b_category_tweets, foreign_key: 'school_b_id' end

######category_tweetモデル

class CategoryTweet < ApplicationRecord belongs_to :tweet //belongs_to :category belongs_to :school_a, foreign_key: 'school_a_id' belongs_to :school_b, foreign_key: 'school_b_id' end

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

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

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

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

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

guest

回答1

0

ベストアンサー

前回の回答がきちんと伝わっていなかったようです。申し訳ありません。

ご紹介したのは中間テーブルを使う例と、中間テーブルを使わない例(調べただけですが・・・)となります。
2つ紹介したことで少し混乱させてしまったようです。


まず今回の場合、中間テーブルを使った実装のほうが好ましいかとおもいます。
理由は、tweetのカテゴリーが何個になってもこのテーブル構成で対応が可能となります。
逆にyakumo02さんの検討している構成だと、仕様変更などでカテゴリーが2個以上になったときに破綻してしまうことになります。

なのでhttps://qiita.com/cawaz3/items/e755a58177212f2aca6cこちらをベースに実装することをお勧めします。


多対多の中間テーブルを実装する場合、通常、テーブルの構成として下記のような形になるかと思います。

tweet

idcontent
1今日は青空だった

category

idname
1日記
2天気

tweet-category

idtweet_idcategory_id
111
212

tweet-categoryを紐解くと、下記のようになります。

ツイート「今日は青空だった」は、「日記」カテゴリーに属している。
ツイート「今日は青空だった」は、「天気」カテゴリーに属している。

つまり、ツイート「今日は青空だった」は、「日記」「天気」カテゴリーに属している。となります。


これをベースにして検討いただくと期待した実装ができるようになるかと思います。

投稿2020/09/23 11:02

編集2020/09/23 11:04
no1knows

総合スコア3365

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

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

Meitoku

2020/09/23 11:09

ご回答ありがとうございます。 それについても、実装しているのですが、同時に複数のcategory_idが保存できない問題が発生している途中です https://teratail.com/questions/293520 こちらも見ていただけないでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問