2020.02.10
【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)と一致するレコードを全て取得できます。
以上でタグ機能的なものが実装できたかと思います!
ここまで読んでくれた心優しい方、コードがクッソ汚くて申し訳ございません!!