投稿サイトを作成中です。
ransack を2つのアクション[posts/index] [posts/like_ranking ]で使用し、分野別の投稿検索をしようとしています。
[posts/index]ではうまく検索できますが、 [posts/like_ranking ]では、[posts/index]の検索結果画面に移行してしまいます。
●初心者で試行錯誤している間に、アクション・ビュー等で、命名が変(逆)になってしまっています。
[posts/index] → [人気投稿画面] (いいね❤︎の多い順に表示)
[posts/like_ranking] → [ 投稿一覧画面]
●試した事
[posts/index] と [posts/like_ranking]を逆にしてみました。
結果:
[投稿一覧画面] でransackで検索→ 分野別の投稿一覧が表示(A)される。
[人気投稿画面] でransackで検索→ 分野別の投稿一覧表示画面(A)に移行してしまう。
分野別のいいねの多い順の投稿の方が重要なので、今は元に戻しています。
両方の画面で、分野別の投稿表示をしたいと思っています。
よろしくお願い致します。
(Mac 10.15.3 Ruby 2.6.3 Rails 6.0.0)
ruby
1post_controller.rb 2 3before_action :set_post, only: [:show, :edit, :update, :destroy] 4before_action :authenticate_user!, only: [:new, :edit, :update, :destroy] 5before_action :correct_user, only: [:edit, :update, :destroy] 6 7def index 8 @q = Post.ransack(params[:q]) 9 @posts = @q.result.page(params[:page]).per(10).recent 10 like_ranking_post_ids = @q.result.pluck(:id) 11 @like_ranking = Post.where(id: like_ranking_post_ids).find(Like.where(post_id: like_ranking_post_ids).group(:post_id).order('count(post_id) desc').limit(15).pluck(:post_id)) 12 @genres = Genre.all 13 end 14 15 def like_ranking 16 @q = Post.ransack(params[:q]) 17 @posts = @q.result.page(params[:page]).per(20).recent 18 end 19 20 def show 21 @user = User.find_by(id: @post.user_id) 22 @like = current_user.likes.find_by(post_id: @post.id) if user_signed_in? 23 @likes_count = Like.where(post_id: @post.id).count 24 @genre = @post.genre 25 end 26 27————省略 28 29private 30 def set_post 31 @post = Post.find(params[:id]) 32 end 33 34————省略
ruby
1posts/index.html.erb 2 3<!-- 検索機能 --> 4<%= search_form_for @q do |f| %> 5 <%= f.label :genre_id, '分野' %> 6 <%= f.select :genre_id_eq, Genre.all.map{|genre| [genre.name, genre.id]} %> 7 <%= f.submit 'この条件で検索', class: "btn btn-sm standard-button" %><%= link_to 'クリア', url_for, class: "btn btn-light btn-sm" %> 8<% end %> 9 10<!-- 全分野のいいねが多い投稿一覧 --> 11<% @like_ranking.each do |post| %> 12 【<%= post.genre.try(:name) %>】<%= link_to post.title, post %> <span class="fa fa-heart like-btn"></span> <%= post.likes.count %>件 by <%= post.user.nickname %> 13<% end %>
ruby
1posts/like_ranking.html.erb 2 3<!-- 検索機能 --> 4<%= search_form_for @q do |f| %> 5 <%= f.label :genre_id, '分野' %> 6 <%= f.select :genre_id_eq, Genre.all.map{|genre| [genre.name, genre.id]} %> 7 <%= f.submit 'この条件で検索', class: "btn btn-sm standard-button" %><%= link_to 'クリア', url_for, class: "btn btn-light btn-sm" %> 8<% end %> 9 10<!-- 一覧表示--> 11<%= render partial: "article", locals: {posts: @posts} %> 12
ruby
1Rails.application.routes.draw do 2 3 mount RailsAdmin::Engine => '/admin', as: 'rails_admin' 4 5 resources :genres 6 7 get 'posts/like_ranking' 8 9 devise_for :users 10 resources :users, only: [:show, :index] 11 12 if Rails.env.development? 13 mount LetterOpenerWeb::Engine, at: "/letter_opener" 14 end 15 16 resources :posts do 17 #get 'like_ranking' on: :member 18 resources :likes, only: [:create, :destroy] 19 end 20 21 root to: "posts#index" 22 23end
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/12 04:10