1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Rails タグ編集・一覧・詳細機能とコードの解説

Posted at

コントローラの作成

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]タグ付け機能① 複数のタグ付け

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?