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

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

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

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

Ruby on Rails

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

Q&A

1回答

2487閲覧

チェックボックスで選択された都道府県(複数可)を登録したい。

jyon3030

総合スコア11

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/07/15 17:42

編集2020/07/15 18:10

前提・実現したいこと

現在マッサージ師の出張範囲を登録できる機能を実装しようとしています。
マッサージ師が複数の都道府県のチェックボックスを選択し、一人のマッサージ師が複数の都道府県を持てる状態にしたいです。

完成形のイメージ←リンクの勤務地指定のような機能を実装したい。

困っている事

各都道府県のチェックボックスを作成し、選択された都道府県のidの配列を取得するところまではできたのですが、createでどう処理して良いのかが分かりません。このidの配列を一個ずつ@Masseur.business_trip_ranges.new(prefecture_id: 配列のid)という形で取得していきたいです。

理想としては中間テーブルであるBusinessTripRangeに選択した都道府県を保存し、

(例) BusinessTripRange id: 1, masseur_id: 1, prefecture_id: 4 BusinessTripRange id: 2, masseur_id: 1, prefecture_id: 3 BusinessTripRange id: 3, masseur_id: 2, prefecture_id: 5, BusinessTripRange id: 4, masseur_id: 3, prefecture_id: 3,

このような形で一斉に登録されるようにしたいです。色々調べたのですが答えに辿り着けずにいます、、
詳しい方いましたらcreateでどういった処理をすれば良いのかなど指摘して頂けないでしょうか、汗

大変忙しい中申し訳ございません。

##エラー内容

unknown attribute 'prefecture_ids' for BusinessTripRange. def create params[:masseur][:prefecture_ids].delete("") @current_masseur.business_trip_ranges.build(business_trip_range_params) if @current_masseur.save flash[:success] = "出張範囲を登録しました" redirect_to store_manager_masseur_business_trip_ranges_url

該当のソースコード

格モデルの関係性

イメージ説明

new.html.erb

<%= form_with(model: @masseur, url: store_manager_masseur_business_trip_ranges_path, masseur_id: @masseur.id, method: :post, local: true) do |f| %> <!--#第3引数に指定したものが、checkboxのvalue値に、第4引数に指定したものが text値になる。--> <%= f.collection_check_boxes(:prefecture_ids, Prefecture.all, :id, :name) do |prefecture| %> <%= prefecture.check_box %> <%= prefecture.text %> <% end %> <%= f.submit class: "btn btn-primary float-right" %> <% end %>

business_trip_ranges_controller

def new @masseur = Masseur.new end def create @current_masseur.business_trip_ranges.build(business_trip_range_params) if @current_masseur.save flash[:success] = "出張範囲を登録しました" redirect_to store_manager_masseur_business_trip_ranges_url else debugger flash[:danger] = "出張範囲の登録に失敗しました" redirect_to new_store_manager_masseur_business_trip_range_url end end private def business_trip_range_params params.require(:masseur).permit(prefecture_ids: []) end
チェックボックスで都道府県を複数選択。createに送られてきたid配列データ "masseur"=>{"prefecture_ids"=>["", "1", "2", "3"]}

試したこと

どの都道府県を選んでも配列の一番目に必ず""が入って来るのでこれが原因かと思いdelete("")で配列の一番目を消して見ましたがcreate出来ませんでした。

またエラー内容からprefecture_idsなんてカラムに設定していないと出るので、controllerにattr_accessor :prefecture_idsと記述してみましたが同じエラーが出ます。

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

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

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

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

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

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

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

gouf

2020/08/06 12:48

状況の再現方法がわからないので確度はないですが: ```ruby creating_record = prefecture_ids.map do |prefecture_id| @current_masseur.business_trip_ranges.build(prefecture_id) end creating_record.map(&:save) ``` のような記述でレコードの作成ができたりしませんか?
guest

回答1

0

モデルにaccepts_nested_attributesは記述されていますか?

投稿2020/08/12 11:11

nasuk47

総合スコア311

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問