前提
【前提】
- 色々試した結果下記の様な状態になったので、コード等混乱している可能性が大いにあります。
- 初学者のため前提から崩れているかもしれません。
- 主に箇条書きのため敬語を使っていない場面が多々あります。
- 下記以外に必要情報等ありましたら教えていただけますと幸いです。
【アプリ概要】
- 各userはお気に入りlistを作成し、list内でshopを登録できる
- shopはいずれかのlistに属する必要がある
- 既存のshopをseedsで用意済み
- listとshopは多対多
- 既存のshopを任意のlistに登録するために中間テーブル(list_shop)を用意済み
【実現したいこと】
- shopをlistに登録したい
- 各shopの詳細画面の「リストを追加」ボタンを押す
↓
追加するlistを選択(複数選択可)
↓
追加完了(shop画面に戻る)
発生している問題・エラーメッセージ
・エラーは発生していない
・createボタンを押してもshopを保存できない
該当のソースコード
new.html.erb(list_shops) <%= form_with model: @list_shop ,url:shop_list_shops_path(shop_id: @shop.id), local: true do |f| %> <div> <div> <%= @shop.shop_name %> </div> <%= f.select :list_ids , List.where(user_id: current_user.id).map { |list| [ list.list_name ] }, {include_hidden: false}, {class: 'form-control',multiple: true} %> <%= hidden_field_tag "list_shop[list_ids][]", session[:list_id] %> <div> <%= f.submit "ショップを追加" %> </div> </div> <% end %>
list_shops_controller def new @shop = Shop.find(params[:shop_id]) @list_shop = ListShop.new end def create @list_shop = ListShop.new @shop = Shop.find(params[:shop_id]) @list_shop = ListShop.create(shop_id: params[:id]) session.delete(:list_id) redirect_to shop_path(@shop.id) end private def shop_params params.require(:list_shops).permit(:shop_name, list_ids: []) end
show.html.erb(shop) <% if ListShop.where(shop_id: @shop.id).exists? %> <%= link_to "リストから削除", shop_destroy_list_shops_path(@shop) , method: :delete, class:"follow-item__follow-btn--unfollow" %> <% else %> <%= link_to 'リストに追加', shop_new_list_shops_path(shop_id: @shop.id) , method: :POST, class:"follow-item__follow-btn--unfollow" %> <% end %> </div>
補足情報
Rails 6.0.3.3
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/12 01:39
2020/11/12 02:17
2020/11/12 03:05
2020/11/12 03:34
2020/11/12 03:38
2020/11/12 06:26
2020/11/12 22:43