前提・実現したいこと
railsでSNSを作成しています。
投稿テーブル、投稿ジャンル中間テーブル、ジャンルテーブルを用意しており、投稿時にジャンルを3つまで選択して中間テーブルに保存できるようにしております。
今回実現したいことは投稿済みの投稿を編集できるページを作成したいのですがどのように記述すればよいのかわからず困っております。
投稿編集ページで該当投稿の情報と投稿に紐付いた中間テーブルに格納されているジャンルのデータを取得して編集後保存したいです。
テーブル
・postsテーブル
t.integer "user_id" t.integer "category_id" t.string "title" t.text "opinion"
・genre_postsテーブル(中間)
t.integer "post_id" t.integer "genre_id"
・genresテーブル
t.string "name"
postsコントローラー(投稿)
def edit @post = Post.find(params[:id]) @selected = GenrePost.where(post_id: params[:id]) @selected_id = @selected.map{|f| f.genre_id} end
@selected_idに選択している投稿に紐付いているgenre_idが配列で入っております。
editページのコード
<%= form_for(@post) do |f| %> <%= f.label :title, "作品名" %> <%= f.text_field :title %><br/> <%= f.label :category_id, "カテゴリー" %> <%= f.collection_select :category_id, Category.all, :id, :name %><br/> ここから↓ <%= f.label :genre, "ジャンル" %> <%= select_tag "", options_from_collection_for_select(Genre.all, :id, :name ) %><br/> <%= select_tag "", options_from_collection_for_select(Genre.all, :id, :name ) %><br/> <%= select_tag "", options_from_collection_for_select(Genre.all, :id, :name ) %><br/> ここまで↑ <%= f.label :opinion, "感想" %> <%= f.text_area :opinion %><br> <%= f.submit "保存", class:"btn btn-info" %> <% end %>
情報不足であれば指摘していただけるとありがたいです。
よろしくお願いいたします。
※追記(2020/03/27)
models/post.rb
class Post < ApplicationRecord belongs_to :user belongs_to :category has_many :genre_posts has_many :genres, through: :genre_posts validates :title, presence: true validates :opinion, presence: true end
models/genre.rb
class Genre < ApplicationRecord has_many :genre_posts has_many :posts, through: :genre_posts validates :name, presence: true end
あなたの回答
tips
プレビュー