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

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

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

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

Q&A

解決済

2回答

375閲覧

ransackについて

987654321

総合スコア28

Ruby on Rails

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

1グッド

0クリップ

投稿2020/05/05 03:54

前提・実現したいこと

ransackを使って検索フォームを作っていますが、
下記のエラーが出てしまいます。
users_pathはどこから出てきたのでしょうか?
またどのように対処すればよろしいでしょうか?
ご教授いただけたら幸いです。

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

ruby

1NoMethodError in Masks#index 2undefined method `users_path' for #<#<Class:0x00007fc5efd398b8>:0x00007fc5ef3266c8> 3Did you mean? user_path

該当のソースコード

masks_controller.rb

ruby

1 def index 2 @users = User.all 3 @search = User.ransack(params[:cont]) 4 @user = @search.result 5 end

haml

1 = search_form_for @search do |f| 2 = f.label :name_cont, "keyword" 3 = f.search_field :name_cont 4 = f.submit "検索"
退会済みユーザー👍を押しています

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

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

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

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

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

maisumakun

2020/05/05 03:58

masks_controllerなのに扱っているモデルがUserなのは意図的なものでしょうか?
987654321

2020/05/05 04:19

Userモデルのnameカラムを取り出したいと考えております。
guest

回答2

0

users_pathはどこから出てきたのでしょうか?

User.ransackしたモデルなので、デフォルトで送信先がusers_pathとなります。

またどのように対処すればよろしいでしょうか?

素直にUsersController#indexで受けて、ルーティングにもresources :usersを追加する、というようにレールに乗ってしまうのが手っ取り早いです。

投稿2020/05/05 04:37

maisumakun

総合スコア146018

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

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

maisumakun

2020/05/05 04:38

もちろん別な名前のコントローラーを用意しても正しく設定すれば動かすことは可能ですが、その労力を投資するだけの意味はあるのかが疑問です。
guest

0

ベストアンサー

こういう時、何をした時にそのエラーが発生したのか、を書いておかないと回答者の思い込み、勘違い、読み違いでなかなか正しい回答にたどり着かないことがままあります。
またエラーメッセージは省略しないでください。

indexの画面から検索したとき、ではなく 画面を開くときにそのエラーになった
というよみは合ってます?

maisumakunさんの質問にもあるように、Maskの

コントローラーなのに、@search はUserを指しています。
なので、search_form_for @search は「submitされるとUserのindexに行く」と解釈します。つまり users_path へ行くと。

users_pathはここで出てきます。

で、おそらく Mask関係のrouteは定義されてるのでしょうが、Userのrouteは(少なくともindexは)定義されて居ないのでしょう。

Maskコントローラーでおこなうのが意図されたものなら
search_form_for @search, url: masks_path としてください。

ただ、Maskコントローラーでおこなうのが本当によいのか?は検討してください。メンテとかで混乱する元ですから。

投稿2020/05/05 04:22

winterboum

総合スコア23567

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

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

987654321

2020/05/05 05:11

質問の仕方がなっておりませんでした。 失礼いたしました。 ご教授いただいた解答でエラーが解決いたしました。 有り難う御座いました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問