前提・実現したいこと
現在マッサージ師の出張範囲を登録できる機能を実装しようとしています。
マッサージ師が複数の都道府県のチェックボックスを選択し、一人のマッサージ師が複数の都道府県を持てる状態にしたいです。
完成形のイメージ←リンクの勤務地指定のような機能を実装したい。
困っている事
各都道府県のチェックボックスを作成し、選択された都道府県の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/ツールのバージョンなど)
ここにより詳細な情報を記載してください。