コントローラの作成
posts_controller.rb
def index
@posts = Post.all.order(created_at: :desc)
@tag_list = Tag.all #ビューでタグ一覧を表示するために全取得。
end
def show
@post = Post.find_by(id: params[:id]) #クリックした投稿を取得。
@post_tags = @post.tags #そのクリックした投稿に紐付けられているタグの取得
end
def edit
@post = Post.find_by(id: params[:id])
@tag_list = @post.tags.pluck(:tag_name).join(',')
end
def update
@post = Post.find_by(id: params[:id])
@post.content = params[:content]
tag_list = params[:post][:tag_name].split(nil)
if @post.save
@post.save_tag(tag_list)
flash[:notice] = '投稿を編集できました!'
redirect_to('/posts/index')
else
flash[:notice] = '投稿は100文字以内で入力してください'
render('posts/edit')
end
end
投稿詳細ファイルの作成
posts/show.html.erb
<%@post_tags.each do |tag|%>
<%=link_to(tag.tag_name, tag_posts_path(tag_id: tag.id))%>
#タグに関する投稿数の取得
<%="#{tag.posts.count}"%>
<% end %>
投稿一覧ファイルの作成
posts/index.html.erb
<h3> タグリスト</h3>
<% @tag_list.each do |list|%>・・1
<%= link_to(list.tag_name, tag_posts_path(tag_id: list.id))%>・・2
<%="#{list.posts.count}"%>投稿//現在そのタグを持つ投稿が幾つ存在するかをカウントして表示
<% end %>
コードの解説
1・・indexアクションで全取得したタグを全て表示
2・・そのタグに関連する投稿を表示するパスへのリンクを張りこのリンクをクリックすることで、そのタグに関連付けられた投稿を表示
参考記事
[Ruby on rails]タグ付け機能① 複数のタグ付け
[Ruby on rails]タグ付け機能① 複数のタグ付け