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

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

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

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

Ruby

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

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Ruby on Rails

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

Q&A

解決済

1回答

2099閲覧

Rails Teacher1人の都道府県の複数登録をcollection_selectで行いたいです。

KokiOya

総合スコア27

Ruby on Rails 5

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

Ruby

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

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Ruby on Rails

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

0グッド

0クリップ

投稿2019/03/29 09:07

編集2019/03/31 11:18

前提・実現したいこと

collection_select を使ってTeacher1人につき二つ以上の都道府県を登録できるようにしたいのですが、色々試した結果方法がわかりません。

イメージとしては下図のようにしたいです。
イメージ説明

該当のソースコード

prefecture.rb

class Prefecture < ApplicationRecord has_many :cities has_many :teachers_prefectures, foreign_key: 'prefecture_id' has_many :teachers, through: :teachers_prefectures end

teacher.rb

class Teacher < ApplicationRecord has_many :teachers_prefectures, foreign_key: 'teacher_id' has_many :prefectures, through: :teachers_prefectures end

teachers_prefecture.rb

class TeachersPrefecture < ApplicationRecord belongs_to :teacher belongs_to :prefecture end

このように多対多の関連付けをしています。

new.html.erb

<div clas = "field"> <%= f.label :"指導可能都道府県1" %> <%= f.collection_select :prefecture_ids, Prefecture.all, :id, :name %> </div> <div clas = "field"> <%= f.label :"指導可能都道府県2" %> <%= f.collection_select :prefecture_ids, Prefecture.all, :id, :name %> </div> <div clas = "field"> <%= f.label :"指導可能都道府県3" %> <%= f.collection_select :prefecture_ids, Prefecture.all, :id, :name %> </div>

teacher_controller.rb

class TeachersController < ApplicationController def new @teacher = Teacher.new @teacher.teachers_prefectures.build end def create @teacher = Teacher.new(teacher_params) if @teacher.save redirect_to teachers_url else render 'new' end end private def teacher_params params.require(:teacher).permit(prefecture_ids:[]) end end

このように記述しています。間違っているのはわかるのですが、どこがどのように間違っているか全くわからないので教えていただければたかります。ruby on rails もほぼ初心者で、この投稿も初めてなので、わかりにくい点や失礼な点があるかもしれませんがよろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

usersテーブルには都道府県のidを格納する prefecture_id属性(カラム)があると思います。

そのため、以下の様にする必要があると思います。

<%= f.collection_select :prefecture_id, Prefecture.all, :id, :name %>

投稿2019/03/29 11:43

ykp_yk

総合スコア654

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

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

KokiOya

2019/03/30 14:09

その方法では、teacher1人につき1つしか都道府県を登録することができないのではないでしょうか?
ykp_yk

2019/04/05 04:16

あ。なるほど。 現状は都道府県入力は3つまでですか? <%= collection_select(:pref, :area, Prefecture.all, :id, :name, {}, {multiple: true}) %> <%= collection_select(:pref, :area, Prefecture.all, :id, :name, {}, {multiple: true}) %> <%= collection_select(:pref, :area, Prefecture.all, :id, :name, {}, {multiple: true}) %> こんな感じで入力フォームを作ると params[:pref][:area] で選択した都道府県の配列が取得できますのでそれを使い中間テーブルに保存すると良いと思います。(配列に値がない場合取り除く処理をつけてくださいね。) もし3つではなく数を増減したいのでしたらjsを使って動的に選択を増やすなどしてみてください。
KokiOya

2019/04/11 12:07

その場合strong parametersはどのようにすれば良いのでしょうか。遅い返信となってしまい申し訳ありません
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問