5
6

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 3 years have passed since last update.

railsのハッシュタグ検索の実装

Posted at

今回は、railsでハッシュタグ機能を実装しました。
https://glodia.jp/blog/3936/
のサイトを参考にさせていただきました。

完成図
商品を出品する時にタグをつけると

スクリーンショット 2020-09-07 18.44.13.png

リンクが踏めるハッシュタグが投稿詳細の際に確認でき、
スクリーンショット 2020-09-07 18.45.37.png

リンクの先には同じタグを持った商品が並ぶ
スクリーンショット 2020-09-07 18.57.37.png

実装方法
1 商品テーブルitemsとタグテーブルtagsは中間テーブルで結びついている
2 ヘルパーに、タグ名をリンクにするための記述をする

items_helper.rb
def render_with_hashtags(tag_name, tag_id)
tag_name.gsub(/[##][\w\p{Han}ぁ-ヶヲ-゚ー]+/){|word| link_to word, "/item/hashtag/#{word.delete("#")}?tag_id=#{tag_id}"}.html_safe
end

第一引数でタグの名前、第二引数で中間テーブルに保存されているタグのidを渡してます。
gsubメソッドでurlに置換しhtml_safeメソッドをつけることでエスケープ処理を避け、ビューに「#名前」の形でリンクが踏めるようになります。
?tag_id=#{tag_id} の記述で、タグのidをリンクの中に仕込む

3 ルーティングの実装

routes.rb
 get '/item/hashtag/:name', to: "items#hashtag"

本来はitemコントローラーの中にネストするのがベストだと思います

4 コントローラーの実装

items_controller.rb
def hashtag
  @tag = Tag.find(params[:tag_id])
  @items = @tag.items
end

2でリンクの中に仕込んだtag_idをparamsで渡し、該当するタグを探す
該当するタグを持つ商品を変数に入れる

5 投稿詳細一覧を作る時と同様、eachメソッドを@itemsを使用してビューを実装

完成です!

5
6
0

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
5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?