#環境
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
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。