【Rails】タグ機能をgemなしで実装してみました

【Rails】タグ機能をgemなしで実装してみました

 

はじめに、アイキャッチのセンス最悪ですみませんm(_ _)m

今回実装したのは下記GIF画像のような感じです。

 

 

結構無理矢理感があって(コードが💩です)、もっとスマートなやり方はあると思いますが、まぁ想定通りの挙動になったし、いい勉強になったのでめちゃくちゃ自己満記事です。ためになる記事ではないかもなので、そこら辺を承知の上、閲覧おねがいします^^;

前提

・対象のDBのカラムにタグとなる要素がはいっていること

今回の説明で用いるテーブル テーブル:Image   カラム:idoltype

 

Viewにタグのリンクを作成する

タグを押下でその内容に応じたデータが返ってくるといった処理で実装していきます。

views/images/index.erb
<% @images.each do |image| %> 
  <%= link_to image.idoltype, 
     {controller: "images", action: "index", images_idoltype: image.idoltype},
     class: "color_gray no-underline"%>
<% end %>

eachで投稿内容を表示させています。タグとなるカラムにlink_toでリンクを作成します。

第一引数のimage.idoltypeはImageのidolnameから取得したものです。

第二引数のハッシュ化している纏まりは、controller:”images”の”index”アクションにimage.idolnameをストロングパラメータで送る処理をしています。

第三引数は処理内容とは関係ないですが、一応説明するとただの装飾です。ちなみに第二引数をハッシュにしているのはlink_toとCSSを共存させるためです。

Controllerのアクションに処理を追加

controllers/images_controller.rb
def index 
   #タグリンク(idoltype)
  if params[:images_idoltype].blank?
    @count_post = @images.count
  else
    @images = Image.new
    @images = Image.where(idoltype: params[:images_idoltype])
  end
end

viewから受け取った値がifの条件にあるparams[images.idoltype]に入ります。

Imageテーブルからwhereメソッドでparamsの値(images_idoltype)と一致するレコードを全て取得できます。

以上でタグ機能的なものが実装できたかと思います!

ここまで読んでくれた心優しい方、コードがクッソ汚くて申し訳ございません!!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です