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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

Q&A

解決済

1回答

5858閲覧

「No Ransack::Search object was provided to search_form_for!」エラーを解決したい

Shimizu_Takaaki

総合スコア5

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

0グッド

2クリップ

投稿2019/08/22 04:04

前提・実現したいこと

「No Ransack::Search object was provided to search_form_for!」(Ransack :: Searchオブジェクトがsearch_form_forに提供されていません)エラーを解決したいです。

何卒お力添えを頂けますと幸いです。

Railsを使ったアプリで、GemのRansackを用いてユーザー検索機能をつけようとしています。
コントローラとビューを実装し、リロードしたところで以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

ArgumentError in Posts#index Showing /Users/省略/app/views/layouts/application.html.erb where line #46 raised: No Ransack::Search object was provided to search_form_for!

該当のソースコード

Gemfile

gem 'ransack'

application_controller.rb

def index @search = User.ransack(params[:q]) @users = @search.result end

application.html.erb

<%= search_form_for @search do |f| %> <%= f.label :name_cont, "ユーザー名"%> <%= f.search_field :name_cont %> <div class="actions"><%= f.submit "検索" %></div> <% end %>

試したこと

  1. もう一度bundle install
  2. application.html.erbのsearch_form_for @qの隣にパスを追加(, url: url_forcontroller: 'application', action: 'index')
  3. routes.rbに追加「resources :application, only: [:index]」

下記のサイトを参考にしました。
https://translate.google.com/translate?hl=ja&sl=en&u=https://stackoverflow.com/questions/49860437/no-ransack-search-object-was-provided-to-search-form-for&prev=search

補足情報(FW/ツールのバージョンなど)

mac book pro
ruby 2.5.1
Rails 5.2.3

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

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

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

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

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

guest

回答1

0

ベストアンサー

ArgumentError in Posts#index
と出ているのでおそらく /posts にブラウザからアクセスされているかと思います。
この場合は PostsControllerのindexメソッド(posts#index)が処理の対象になりますので、application#index は呼ばれません。

一方で application.html.erbはどの画面でも共通で呼ばれるため search_form_for が実行されますが、@searchは posts#indexで定義されていないので掲題のエラーにつながっています。

解決方法としては1か2のどちらかですね。

  1. ApplicationControllerとapplication.html.erbではなく、UsersControllerとusers/index.html.erbなど別のコントローラーとビューに処理を持っていく
  2. 検索フォームは共通で出したいためApplicationControllerに記載されているのでしたら、before_actionに移動してどのコントローラーが呼ばれても@searchがセットされるようにする

(例) application_controller.rb

ruby

1 before_action :set_search 2 3 def set_search 4 @search = User.ransack(params[:q]) 5 @users = @search.result 6 end

投稿2019/08/24 16:14

8zca

総合スコア559

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

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

Shimizu_Takaaki

2019/08/31 12:24

せっかく回答頂いたのに返信遅れ申し訳ありません。 ご回答ありがとうございます。 検索フォームは共通で出したいためApplicationControllerに記載していたのですが、ご教示頂いた1、2の方法どちらでもエラーを解消することができました。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問