前提
「一覧画面」と「詳細画面」に表示されたタグをクリックすると、
タグと同じ投稿を絞り込みできる実装をしたいです。
(タグの表示までは問題なく実装できております。)
どなたかご教示のほどよろしくお願い致します。
実現したいこと
[一覧画面]及び[詳細画面]
①下記の「車」タグを押すと
②下記のように「車」タグが入った投稿が全て表示されるようにしたいです。
該当のソースコード
_tag.html.erb
1[一覧画面と詳細画面のタグのパーシャルファイル] 2<a class="badge rounded-pill bg-primary"><%= tag.name %></a>
_post.html.erb
1<li id="<%= dom_id(post) %>"> 2 <div> 3 <div><%= link_to post.title, post_path(post) %></div> 4 posted by <%= post.user.name %> 5 </div> 6 <%= render partial: "tag", collection: post.tags %> 7 8 [以降省略]
index.html.erb
1<div class="container"> 2 <div class="row"> 3 <div class="col"> 4 <ul class="list-unstyled"> 5 <%= render @posts %> 6 7 </ul> 8 <%= paginate @posts %> 9 </div> 10 </div> 11</div>
show_html.erb
1[一部省略] 2 3 <div class="card-body"> 4 <h2 class="h2"> 5 <%= @post.title %> 6 </h2> 7 <%= simple_format(@post.body) %> 8 </div> 9 <div class= "card-footer"> 10 <%= render partial: "tag", collection: @post.tags %> 11 </div> 12 13[一部省略]
試したこと
パーシャルファイルにlink_toメソッドなどを当てはめてみましたが、
実装には至らなかったです。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
何を参考にして実装したのかと、コントローラーを追記してください。
もし何も参考にしていないようであれば、一度「Rails タグ」などで検索して、そちらをもとに実装してうまく行かなければ、質問していただいたほうがよいかと思います。
ご返信ありがとうございます。
以下よりコントローラを転記いたします。
[posts_controller.rb]
class PostsController < ApplicationController
before_action :require_login, only: %i[new create]
before_action :set_q, only: %i[index show new create edit update]
def index
@tag_list = Tag.all
end
def new
@post = Post.new
@tag = @post.tags.new
end
def create
@post = Post.new(post_params)
@post.user_id = current_user.id
tag_list = params[:post][:tag].split(',')
if @post.save
@post.save_tag(tag_list)
redirect_to post_path(@post), success: '投稿完了'
else
flash.now[:danger] = '投稿が作成できません'
render :new
end
end
def show
@post = Post.find(params[:id])
@comment = Comment.new
end
def edit
@post = current_user.posts.find(params[:id])
@tag_list=@post.tags.pluck(:name).join(',')
end
def update
@post = current_user.posts.find(params[:id])
tag_list=params[:post][:tag].split(',')
if @post.update(post_params)
@post.save_tag(tag_list)
redirect_to post_path(@post), success: '投稿の更新完了'
else
flash.now[:danger] = '投稿が更新できません'
render :edit
end
end
def destroy
@post = current_user.posts.find(params[:id])
@post.destroy!
redirect_to posts_path, success: '投稿を削除しました'
end
def search
@tag_list = Tag.all #こっちの投稿一覧表示ページでも全てのタグを表示するために、タグを全取得
@tag = Tag.find(params[:tag_id]) #クリックしたタグを取得
@posts = @tag.posts.all #クリックしたタグに紐付けられた投稿を全て表示
end
private
def set_q
@q = Post.ransack(params[:q])
end
def post_params
params.require(:post).permit(:title, :body, tag_ids: [])
end
end
なお現在、下記のサイトを参考にしておりますが、うまくタグの絞り込みが実装できませんでした。
https://qiita.com/yuki_chrono/items/ce9f6e6ea9be0d438989
加えて、一覧画面および詳細画面のタグのviewファイルを下記より転記いたします。
[_tag.html.erb]
<%= link_to tag.name, posts_path(tag_name: tag.name), class: 'badge rounded-pill bg-primary' %>
以上、ご確認のほどよろしくお願い致します。
あなたの回答
tips
プレビュー