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

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

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

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

Ruby on Rails

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

Q&A

0回答

410閲覧

複数選択可能なセレクトボックスを作成したが複数の値を保存出来ない

tky31

総合スコア17

Ruby

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

Ruby on Rails

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

0グッド

1クリップ

投稿2017/10/15 11:57

Ruby on Rails 5.1.4
Ruby 2.4.1

Parameters: {"utf8"=>"✓", "authenticity_token"=>"zKLg8wAY6hi5B2lJld6VWA3V4yAdtC1lrNLYpIBuweCvqZlExxDKAtI43LnwaA15UOmpbkupHEeGjJoPEFovWg==", **"video"=>{"title"=>"test", "youtube_id"=>"test"}, "genre"=>{"name"=>["", "A", "B", "C"]}, "commit"=>"登録する"}** (0.1ms) begin transaction SQL (2.5ms) INSERT INTO "videos" ("title", "created_at", "updated_at", "youtube_id") VALUES (?, ?, ?, ?) [["title", "test"], ["created_at", "2017-10-15 10:26:29.824962"], ["updated_at", "2017-10-15 10:26:29.824962"], ["youtube_id", "test"]] (0.8ms) commit transaction Genre Load (0.2ms) SELECT "genres".* FROM "genres" WHERE "genres"."name" IN ('', 'A', 'B', 'C') LIMIT ? [["LIMIT", 1]] (0.1ms) begin transaction SQL (0.5ms) INSERT INTO "video_genres" ("created_at", "updated_at", "genre_id", "video_id") VALUES (?, ?, ?, ?) [["created_at", "2017-10-15 10:26:29.847629"], ["updated_at", "2017-10-15 10:26:29.847629"], **["genre_id", 1], ["video_id", 1]]** (0.9ms) commit transaction

###実現したいこと
["genre_id", 1], ["video_id", 1]]
["genre_id", 2], ["video_id", 1]]
["genre_id", 3], ["video_id", 1]]
フォームから上記の様に1つのvideo_idに対して複数のgenre_idを紐付けて保存したいが、複数選択しても["genre_id", 1], ["video_id", 1]]だけ保存されてしまいます。
何か対応策ないでしょうか。

###VideosController

def index @videos = Video.all end def show @videos = Video.all.find_by(id: params[:id]) end def new @video = Video.new @genre = Genre.all end def fields @video = Video.find(1) end def create @video = Video.new(video_params) if @video.save @genre = Genre.find_by(name: params[:genre][:name]) @vg = VideoGenre.new(genre_id: @genre.id, video_id: @video.id)   if @vg.save   redirect_to @video, notice: "登録しました"   else   render 'new'   end end end private def video_params params.require(:video).permit(:title, :youtube_id, { :genre_id=> [] }) end

###モデル

class Genre < ApplicationRecord has_many :video_genre has_many :video, through: :video_genre end
class Video < ApplicationRecord has_many :video_genre has_many :genres, through: :video_genre end

###中間テーブル

class VideoGenre < ApplicationRecord belongs_to :genre, optional: true belongs_to :video, optional: true end

###Views/new.html.erb(フォーム)

<%= form_for @video do |f| %> <div class="field"> <%= f.label :title, "タイトル" %> <%= f.text_field :title %> </div> <div class="field"> <%= f.label :youtube_id, "YoutubeID" %> <%= f.text_field :youtube_id %> </div> <%= field_set_tag 'ジャンル選択' do %> <%= fields_for @video.genres do |af| %> <div class="field"> <%= af.collection_select(:name, @genre, :name, :name,{},{multiple: true}) %> </div> <% end %> <% end %> <div class="actions"> <%= f.submit "登録する" %> </div> <% end %>
個人的にはStrong Parametersが上手く設定できていないのかなと思っているのですが、原因がよく分かりません。 何かヒントになることでも良いので、よろしければご教授お願いいたします。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問