Railsにて、collection_check_boxesで、多対多のデータモデルにデータを保存したものを、
Viewで表示させたいのですが、いくら調べても答えにたどり着くことができませんでした。。
ご教示いただけると幸いです。
#困っていること
多対多のデータモデルのデータをViewで表示させることができない。
ユーザーが、checkboxで複数の都道府県をチェックし、それらをデータベースに保存µpostし、
保存した都道府県をViewに表示するという機能を実装させたいです。(メンバー募集サイトを作成中です。)
Micropostモデル---ActivityAreaモデル(中間テーブル)---Prefectureモデル
という、
多対多のデータモデルを作成しております。
1,これ(colllection_check_boxesヘルパーで作成したもの)で、投稿をして、
2,投稿一覧のViewで都道府県を表示させたい。
#自分で書いたコード
・手順1,formのcollection_check_boxesで,データベースにデータを保存する。
<%= form_with(model: @micropost, local: true) do |f| %> <div class="field"> <h1>活動地域<span>※必須</span></h1> <div class="prefecture-column"> <%= f.collection_check_boxes :prefecture_ids, Prefecture.all, :id, :prefecture, include_hidden: false do |b| %> <%= b.label { b.check_box + b.text } %> <% end %> </div> </div> <div class="btn-field"> <%= f.submit "投稿する", class: "btn btn-primary" %> <input type="button" id="closeBtn" value='閉じる'> </div> <% end %>
・手順2,データベースに保存した内容をViewで出力する。(ここが何を書けばいいかわからない部分です。)
<li class="microposts"> <%= render @microposts %> </li> <%= will_paginate @microposts, params: { controller: :microposts, action: :index } %>
#上記の 「render @microposts」の対象のコード <li id="micropost-<%= micropost.id %>"> <h1 class="user"><%= link_to micropost.user.name, micropost.user %></h1> <span class="prefecture"><%#= ここに何を入力するべきなのかわからないです。。[micropost.activity_area.prefecrure]と入力してみましたが、エラーになります。 %></span> <span class="day_of_activity"><%= %></span> <p class="content"><%= micropost.content %></p> <span class="timestamp"> <%= micropost.created_at.strftime('%Y/%m/%d %H:%M:%S') %> <%= link_to "削除する", micropost, method: :delete, data: { confirm: "投稿を削除してもよろしいですか?" } if current_user?(micropost.user) %> </span> <hr> </li>
・対象のコントローラー
(自分的には、ここで、ActivityAreaモデル
やPrefectureモデル
を使用したインスタンス変数を定義する必要があるのかな、、と考えているのですが、どのように実装すればいいのでしょうか。)
class MicropostsController < ApplicationController def index @microposts = Micropost.paginate(page: params[:page]) @micropost = current_user.microposts.build if logged_in? end end
・マイグレーションファイル
class CreateMicroposts < ActiveRecord::Migration[6.0] def change create_table :microposts do |t| t.string :title t.string :url t.text :content t.references :user, null: false, foreign_key: true t.timestamps end add_index :microposts, [:user_id, :created_at] end end
class CreateActivityAreas < ActiveRecord::Migration[6.0] def change create_table :activity_areas do |t| t.references :micropost, foreign_key: true t.references :prefecture, foreign_key: true t.timestamps end end end
class CreatePrefectures < ActiveRecord::Migration[6.0] def change create_table :prefectures do |t| t.string :prefecture t.timestamps end end end
恐れ入りますが、ご確認の程よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/29 23:13