Ruby
Rails

RubyOnRailsのタグ機能を応用した少し便利なトップページ

前説

初めまして、Rubyもう2ヶ月経っていた初心者です。
以前、タグ機能実装の話をさせていただきました。それから色々といじっていたので、ここで報告しようかと思います。完全に僕が考え抜いて実装した機能なので、親心が芽生えます。
他タグに関する内容はこちら

実装した機能

マイページ編集にて登録したタグを、タイムラインで自動で表示させて、そのタグの検索結果を非同期で閲覧できる機能。

多分意味がわかんねえという方に動画でお教えします。

gif_tag.gif

マイページでは以下のようにタグを登録できます。

IMG_6226.JPG

products_controller.rb
  def index
   #標準タグの時のツイートを探し出す
    @products = Product.order("created_at DESC").page(params[:page]).per(10)
    if user_signed_in?

    #create時にいいねを生成するインスタンス
    @likes = Like.new(user_id: current_user.id, product_id: params[:product_id])

    #destroy時にいいねをテーブルから探し出す
    @like = Like.find_by(user_id: current_user.id)

   #ここから大事
   #@tag -> ユーザーの持つタグ情報
    @tag =  User.find(current_user.id).tag_list
   #配列を用意
    @tag_products = []
   #一つずつタグ情報に関連するツイートを探し出す
      @tag.each do |a_tag|
        @tag_products << Product.tagged_with(a_tag)
      end
    end
  end

上記はコントローラーのコードです。
結局、@tag_productsには固有のタグ情報を持つツイート達が入ってます。

index.html.erb
 <% if user_signed_in? %>
   <% split_number = 12 / (@tag.count+1) %>
     <% @tag.each do |tag| %>
     <% @tag_number = @tag.index("#{tag}").to_i %>
     <li class="tab col s<%= split_number %>"><a href="#test<%= @tag_number + 2 %>"><%= tag %></a></li>
      <% end %>
     <li class="tab col s<%= split_number %>"><a class="active"  href="#test1">標準</a></li>
<% end %>

上記のコードでは、上の切り替えタブが登録したタグの数に応じて、幅が合うようにコードを書きました。

index.html.erb
 <% n = 2 %>
 <% @tag_products.each do |a_tag| %>
   <div class="page" id ="test<%= n %>">
   <%= render 'products/index_to_product' , products: a_tag %>
   <% n += 1 %>
   </div>
 <% end %>

上記のコードでは、中身の応じてタグの検索結果とそのツイート内容が表示されるように書きました。ここが、当初うまくいかず、ツイートのタグと検索内容が相違が生じていました。
nを使ったり、あまり綺麗なコードではないなと個人的に思っているので、まさかりなどあれば・・・。
test1は標準タブなので、タグ検索タブはtest2~となります。そのため、nは2が初期値となっています。

終わりに

アルゴリズムを少し考えるのに苦戦したので、Rubyをもう少し書けるようにしないといけないなと思いました。