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

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

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

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

Q&A

解決済

1回答

492閲覧

ransack を2つのアクションで使用。一方のview (a) で検索可能だが、他方のview (b)で検索すると、(a)の検索結果画面 に移行してしまって検索できない。

szngk

総合スコア14

Ruby on Rails 6

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

0グッド

0クリップ

投稿2020/02/28 08:12

編集2020/02/28 08:15

投稿サイトを作成中です。
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

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

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

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

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

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

guest

回答1

0

ベストアンサー

search_form_for(@q, url: posts_path)
search_form_for(@q, url: like_ranking_posts_path)
の様に、どのactionで処理するか指定しましょう。

like_ranking_posts_path というのでエラーになったら
rails routs
で確認してください

投稿2020/03/11 22:39

winterboum

総合スコア23329

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

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

szngk

2020/03/12 04:10

できました!  search_form_for(@q, url:posts_path)
 search_form_for(@q, url:posts_like_ranking_path) ransackの方が便利なので大変助かります。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問