今回は、railsでハッシュタグ機能を実装しました。
https://glodia.jp/blog/3936/
のサイトを参考にさせていただきました。
完成図
商品を出品する時にタグをつけると
実装方法
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を使用してビューを実装
完成です!