質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

1117閲覧

Ralis acts-as-taggable-onのタグ検索がうまく出来ません

WqiMf

総合スコア1

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2021/02/11 08:39

編集2021/02/15 01:19

#環境
Rails 6.0.0
gem 'acts-as-taggable-on', '~> 6.0'

#状況
acts-as-taggable-on を使用しております。
タグの保存などは上手く行っており、タグ一覧の表示まで出来ました。次にタグ検索を実装しようとしております。

タグの一覧からタグをクリック → search.html.erbで選択したタグに関連する一覧が表示される
といったイメージなのですが、search.html.erbに遷移しても一覧が表示されませんでした。

ターミナルでパラムスを確認したのですが、

[1] pry(#<ArticlesController>)> params => <ActionController::Parameters {"_method"=>"get", "authenticity_token"=>"/9KYP1ID4vpN0Q0QeetF2w+KblKbZ6/oQusURjGXBq1IvhM/xXrMDMUUvN9i4oHOD6ytltupWm4oj7xAQQxdbA==", "tag_name"=>"2", "controller"=>"articles", "action"=>"search"} permitted: false>

とでてるので問題なく動作しているように見えます。

恐れ入りますが、どこが問題なのかご教示いただけますでしょうか。

#コード

index.html.erb

<div class="wraper"> <%= render "shared/header" %> <%# 検索 %> <div class="contents"> <%= form_with(url: search_articles_path, local: true, method: :get) do |form| %> <%= form.text_field :keyword, placeholder: "投稿を検索する" %> <%= form.submit "検索" %> <% end %> </div> <%# タグ一覧表示 %> <div class="contents"> <% @tags.each do |tag| %> <%# <%= tag.name %> <%= link_to tag.name, search_articles_path(tag_name: tag), method: :get %> <% end %> </div> <% @articles.each do |f| %> <div class="contents"> <div class="contents-top"> <div class="content-x"> 作品タイトル:</div> <div class="contents-column"> <%= f.anime %> </div> <div class="contents-time"> <%= f.created_at.to_s(:datetime_jp) %> </div> </div> <div class="contents-top"> <div class="content-x"> 公式サイト:</div> <div class="contents-column"> <%= f.official_site %> </div> </div> <div class="contents-top"> <div class="content-x"> レビュー:</div> <div class="contents-column"> <%= link_to f.title, article_path(f.id), method: :get %> </div> </div> <div class="contents-top"> <div class="content-x"> 投稿者:</div> <div class="contents-column"> <%= link_to f.user.nickname, "/users/#{f.user_id}" %> </div> </div> </div> <% end %> <%= render "shared/footer" %> </div>

search.html.erb

<div class="wraper"> <%= render "shared/header" %> <div class="contents row"> <% @articles.each do |f| %> <div class="contents"> <div class="contents-top"> <div class="content-x"> 作品タイトル:</div> <div class="contents-column"> <%= f.anime %> </div> <div class="contents-time"> <%= f.created_at.to_s(:datetime_jp) %> </div> </div> <div class="contents-top"> <div class="content-x"> 公式サイト:</div> <div class="contents-column"> <%= f.official_site %> </div> </div> <div class="contents-top"> <div class="content-x"> レビュー:</div> <div class="contents-column"> <%= link_to f.title, article_path(f.id), method: :get %> </div> </div> <div class="contents-top"> <div class="content-x"> 投稿者:</div> <div class="contents-column"> <%= link_to f.user.nickname, "/users/#{f.user_id}" %> </div> </div> </div> <% end %> </div> <%= render "shared/footer" %> </div>

articles_controller.rb

class ArticlesController < ApplicationController before_action :set_article, only: [:edit, :show] before_action :move_to_index, except: [:index, :show, :search] def index @articles = Article.all.order(created_at: :desc).includes(:user) @tags = Article.tag_counts_on(:tags) # タグ一覧表示 end def search @articles = Article.search(params[:keyword]) # @articles = Article.search(params[:tag]) if params[:tag_name] binding.pry @articles = Article.tagged_with("#{params[:tag_name]}") end end def new @article = Article.new end def create @article = Article.new(article_params) if @article.save redirect_to root_path else render :new end end def destroy article = Article.find(params[:id]) if article.destroy redirect_to root_path else render :index end end def edit end def update article = Article.find(params[:id]) if article.update(article_params) redirect_to root_path else render :edit end end def show @tags = @article.tag_counts_on(:tags) # 投稿に紐付くタグの表示 end private def article_params params.require(:article).permit(:anime, :title, :review, :official_site, :tag_list).merge(user_id: current_user.id) end def set_article @article = Article.find(params[:id]) end def move_to_index unless user_signed_in? redirect_to action: :index end end end

追記
コントローラーを下記のように変えてみましたが、変わりませんでした…。paramsも確認しましたが、

[1] pry(#<ArticlesController>)> params => <ActionController::Parameters {"_method"=>"get", "authenticity_token"=>"gaD3HXDpUtYXNSaYvCgTGdIpOlxO8SE5LL1IUkI0n3mdo4LnOT9lZM2HmXM0PrxRCNOA2H+h9FcAk32gCduLlA==", "tag_name"=>"4", "controller"=>"articles", "action"=>"search"} permitted: false>

上記でした。

articles_controller.rb

1 def search 2 binding.pry 3 if params[:tag_name] 4 # binding.pry 5 @articles = Article.tagged_with("#{params[:tag_name]}") 6 else 7 @articles = Article.search(params[:keyword]) 8 end 9 end

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

下記のように変更したら動きました。サーチとうまく共存ができてなかったのでしょうかね?
正直なんでこれでうまくいったのかよく理解できてないです…。

Index

1 2 <%# タグ一覧表示 %> 3 <div class="contents"> 4 <% @tags.each do |tag| %> 5 <%# <%= tag.name %> 6 <%= link_to tag.name, articles_path(tag_name: tag.name), method: :get %> 7 <% end %> 8 </div> 9

Controller

1 2 def index 3 @articles = Article.all.order(created_at: :desc).includes(:user,:tags) 4 @tags = Article.tag_counts_on(:tags) # タグ一覧表示 5 if params[:tag_name] 6 @articles = Article.tagged_with("#{params[:tag_name]}") 7 end 8 end

投稿2021/02/15 06:17

WqiMf

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問