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

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

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

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

Q&A

1回答

1203閲覧

リレーションを組んでいる二つのテーブルに同じカラムを同時に保存したいです

tomoharu

総合スコア107

Ruby

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

0グッド

0クリップ

投稿2017/05/03 09:55

現状: テーブルが二つあり、GenreテーブルとComicテーブルがあります。中間にComicGenreテーブルがあります。(以下、ER図参照) 多対多の関係です。

イメージ説明

comics.id = comic_genres.comic_id
genres.id = comic_genres.genres_id
です。

ruby

1#ComicsController 2def create 3 @comic = Comic.new(comic_params) 4 @comic.save 5 @genre = Genre.new(genre_params) 6 @genre.save 7 comicgenre = ComicGenre.new(comic_id: "comic.id", genre_id: "genre.id") 8 comicgenre.save 9end
やりたいこと: リレーションが組まれるためには、Comic.newするたびに、ComicGenreにも同じidがnewされないといけないと考えています。(Genreテーブルとのリレーションをくまなければならない。) しかし、Rails cで見てみると <ComicGenre:0x007fa48c994c78 id: 4, comic_id: 0, genre_id: 0, created_at: Wed, 03 May 2017 03:05:13 UTC +00:00, updated_at: Wed, 03 May 2017 03:05:13 UTC +00:00>, <ComicGenre:0x007fa48c994a98 id: 5, comic_id: 0, genre_id: 0, created_at: Wed, 03 May 2017 03:08:46 UTC +00:00, updated_at: Wed, 03 May 2017 03:08:46 UTC +00:00>] このような感じで、comicgenreに保存はされるのですが、comic_idとgenre_idが0のままで保存されてしまいます。 質問:Comic.newしたタイミングでそのidと同じidがcomicgenreのcomic_idに保存される方法はありますか。(ちなみにGenreはユーザーがラジオボタンで選んで投稿する形になっています。 補足:色々調べた結果、accepts_nested_attributes_forがそれっぽいと考えているのですが、理解を深めるために、一度これは使わない形で書いています。(何もわからず書いても、意味がないと考えているので) 何卒、よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

これは多対多の関係なので、

Comicクラスに

ruby

1 has_many :comic_genres 2 has_many :genres, through: :comic_genres

ComicGenreクラスに

belongs_to :comic belongs_to :genre

Genreクラスに

has_many :category_products has_many :comics, through: :comic_genres

を追加して、

ruby

1def create 2 @comic = Comic.create(comic_params) 3 @genre = @comic.genres.create(genre_params) 4end

とすると、自動で中間テーブルに追加されます。

こちらのサイトが詳しく、参考になると思います。
http://ruby-rails.hatenadiary.com/entry/20141204/1417688260

投稿2017/05/19 01:53

cameluby

総合スコア891

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

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

tomoharu

2017/05/20 05:17

詳しくお教えくださり、ありがとございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問