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

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

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

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

Q&A

1回答

560閲覧

Ruby on Rails has_many 重複データ登録時の中間テーブルへの登録

masoma

総合スコア7

Ruby on Rails 6

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

0グッド

0クリップ

投稿2020/05/18 11:59

前提・実現したいこと

投稿した記事にタグをつけられるWebアプリを作成しているのですが「記事 多:多 タグ」の関係性がいまいち理解できません。
Aritcle、Tag modelモデルを作成し中間テーブルを作成し記事のパラメータにaccepts_nested_attributes_forでタグを混ぜてsaveすると自動的に中間テーブルにレコードが作成されるところまではできました。
しかし、既存タグが重複してtagsテーブルに登録されてしまいます。

例:
aritcles
(id:1 aritcle:記事1) (id:2 aritcle:記事2)
tags
(id:1 tag:Java) (id:2 tag:Java)
aritcle_tag
(aritcle_id:1 tag_id:1) (aritcle_id:2 tag_id:2)←この2つ目のレコードのtag_idが1でなおかつtagsに重複するJavaが登録されないでほしい

例でいうと中間テーブル登録時にタグがJavaの記事(Aritcle)であれば中間テーブルへ登録されるタグはすべて1であってほしいのですが、新たに生成されたtagsのidが挿入されてしまいます。
かと言って既存タグだった場合に記事だけを登録しても中間テーブルにレコードが作成されない(?)ためどうすればよいのかわかりません。

それに、has_manyを使って実装したにもかかわらずどうみても多対多ではなく1体1になっているような気がします。(現状、新規レコードのみが中間テーブルへ登録されているため)

そもそも理解が間違っている、参考になる意見・方法・ページなどあれば教えていただけないでしょうか。

該当のソースコード

なし

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

中間テーブルの中身は一対一で良いと思いますよ。
テーブルの関係性が多対多なので、

投稿2020/05/18 12:16

jack_kanzaki

総合スコア106

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

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

masoma

2020/05/18 12:21

同じタグが登録されてしまうことに関して何か良い意見はないでしょうか。 例えば検索をかけるときにタグが重複していると問題があるように思うのですが。
jack_kanzaki

2020/05/18 13:48

モデリングと中間テーブルを見ないと、なんとも言えないですが、中間テーブルにもidとarticle_id,tag_idがあると思うので、そのidで呼び出せそうです。
jack_kanzaki

2020/05/18 13:54

コントローラーもビューも重要です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問